[英]Change UISegmentedControl selected index or value programmatically
[英]UISegmentedControl change value programmatically from toolbar click
我有一个.xib,其中我有一个具有UISegmentedControl的视图,我以编程方式添加它们。
在appdelegate中,我编写了添加工具栏的代码和事件。
在工具栏上单击从给定的mutablearray加载的UISegmentedControl。
我想要做的是:当我点击工具栏按钮时,无法更改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];
你的问题可能会更清楚,但这是我对答案的最佳猜测。 这假设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];
}
请享用,
达米安
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.