2012-02-27 11 views
0

私はUISegmentedControlを持つビューを持つ1つの.xibを持っており、プログラムでそれらを追加しています。UISegmentedControlは、ツールバーから値をプログラムで変更します。

私はappdelegateでツールバーを追加するコードを書いてあり、イベントがあります。
ツールバーで、指定されたmutable配列から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というプロパティであり、(適切なゲッターによって割り当てられていることが前提です)。有効/無効

更新:

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

アップデートのタイトルは:言っ

[self.yourSegmentedControl setTitle:aString forSegmentAtIndex:anInt];   

、あなたのコードは単純である可能性があります。 appDelegateではなくUISegmentedControlをUIViewControllerに配置すると、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

おかげで、私が実装してみましょう... –

関連する問題