2012-02-27 58 views
0

我有一個.xib,其中有一個UISegmentedControl的視圖,我將以編程方式添加它們。UISegmentedControl以編程方式從工具欄中更改值點擊

在appdelegate中,我寫了添加工具欄的代碼,還有事件。
在工具欄上單擊從給定的可變陣列加載的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]; 

回答

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

享受,

達明

+0

感謝您的答覆達米安,讓我嘗試實現... – 2012-02-28 17:22:50

相關問題