2012-02-27 4 views
0

У меня есть один .xib, в котором у меня есть представление с UISegmentedControl, и я добавляю их программно.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]; 

ответ

2

Ваш вопрос может быть более ясным, но вот моя догадка в ответ. Это предполагает, что UISegmentedControl - это свойство, называемое yourSegmentedControl, и было выделено (желательно соответствующим образом).

Обновление включено/выключено: название

[self.yourSegmentedControl setEnabled:aBOOL forSegmentAtIndex:anInt]; 

Update:

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

Наслаждайтесь,

Damien

+0

Спасибо за ответ Дамьена, позвольте мне попробовать реализовать ... –

Смежные вопросы