UISegmentedControl从工具栏单击以编程方式更改值

时间:2012-02-27 12:45:06

标签: ios uisegmentedcontrol

我有一个.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];

1 个答案:

答案 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];
}

享受,

达明