我有一个.xib,其中有一个带有UISegmentedControl的视图,我以编程方式添加它们。
在appdelegate中,我编写了添加工具栏的代码和事件 在工具栏上单击UISegmentedControl从给定的mutablearray加载。
我想要做的是:当我点击工具栏按钮时,无法更改UISegmentedControl的值。
我写了一个添加UISegment及其值的方法。每次在工具栏按钮上单击时,我都会调用该方法。
创建UISegmentedControl的方法:
delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSMutableArray *itemArray = [[NSMutableArray alloc] init];
itemArrayforID = [[NSMutableArray alloc] init];
itemArrayforImage = [[NSMutableArray alloc] init];
bool isfirst = true;
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:itemArray];
[segmentedControl removeFromSuperview];
int temp =0;
NSLog(@"row count : %d",delegate.TopMenus.count);
for(int i=0;i<delegate.TopMenus.count;i++)
{
delegate.curTopsMenu = [delegate.TopMenus objectAtIndex:i];
NSLog(@"toolbar click : %@",delegate.toolbarbtnclick);
NSLog(@"parent_id : %@",[delegate.curTopsMenu valueForKey:@"parent_id"]);
if([delegate.toolbarbtnclick isEqualToString:[delegate.curTopsMenu valueForKey:@"parent_id"]])
{
int aaa = [[delegate.curTopsMenu valueForKey:@"top_menu_id"] intValue];
if(isfirst)
{
MenuLoadID = [NSString stringWithFormat:@"%d",aaa];
isfirst =false;
}
NSString *TEXT = [delegate.curTopsMenu valueForKey:@"top_menu_text"];
NSString *TEXTID = [delegate.curTopsMenu valueForKey:@"top_menu_id"];
NSString *SelectIMG = [delegate.curTopsMenu valueForKey:@"image_path"];
NSLog(@" TEXT : %@ and TEXTID : %@",TEXT,TEXTID);
[itemArray insertObject:TEXT atIndex:temp];
[itemArrayforID insertObject:TEXTID atIndex:temp];
[itemArrayforImage insertObject:SelectIMG atIndex:temp];
temp++;
}
}
segmentedControl = [[UISegmentedControl alloc] initWithItems:itemArray];
[segmentedControl removeFromSuperview];
segmentedControl.frame = CGRectMake(0, 100, 320, 40);
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.selectedSegmentIndex = 0;
[segmentedControl addTarget:self action:@selector(changeSegment:) forControlEvents:UIControlEventValueChanged];
UIImage *segmentSelected = [[UIImage imageNamed:@"games-on.png"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage *segmentUnselected = [[UIImage imageNamed:@"games-ho.png"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[[UISegmentedControl appearance] setBackgroundImage:segmentUnselected
forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:segmentSelected
forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[self.navigationController.view addSubview:segmentedControl];
[segmentedControl release];
segmentSelected = nil;
[itemArray release];
[self MenuRowCount];
工具栏按钮代码点击:
ViewController *VC = [[ViewController alloc] init];
[VC LoadTopMenuFromBottmClick];
答案 0 :(得分:2)
你的问题可能会更清楚,但这是我对答案的最佳猜测。这假定UISegmentedControl是一个名为yourSegmentedControl的属性,并且已经被分配(最好是通过适当的getter)。
更新启用/禁用:
[self.yourSegmentedControl setEnabled:aBOOL forSegmentAtIndex:anInt];
更新标题:
[self.yourSegmentedControl setTitle:aString forSegmentAtIndex:anInt];
那就是说,你的代码可能更简单。如果将UISegmentedControl放在UIViewController而不是appDelegate中,则可以利用toolbarItems属性将控件附加到导航控制器。下一个代码不是完全你的问题,但可能是有益的:
@interface StocksTableViewController()
@property (nonatomic, strong) IBOutlet UISegmentedControl *stockFilterSegmentedControl;
@end
@implementation StocksTableViewController
@synthesize stockFilterSegmentedControl = _stockFilterSegmentedControl;
- (UISegmentedControl*)stockFilterSegmentedControl {
if (!_stockFilterSegmentedControl) {
_stockFilterSegmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"All",@"Holdings", @"To Do", nil]];
[_stockFilterSegmentedControl addTarget:self action:@selector(stockFilterControlPressed:) forControlEvents:UIControlEventValueChanged];
_stockFilterSegmentedControl.selectedSegmentIndex = 0;
_stockFilterSegmentedControl.autoresizingMask = UIViewAutoresizingFlexibleHeight;
_stockFilterSegmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
}
return _stockFilterSegmentedControl;
}
- (NSArray*)navFooterToolbarArray {
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.stockFilterSegmentedControl];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *refresh = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh:)];
return [NSArray arrayWithObjects:flexibleSpace, barButtonItem, flexibleSpace, refresh, nil];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.toolbarItems = [self navFooterToolbarArray];
}
享受,
达明