2013-04-08 23 views
1

我已經使用分段控件讓用戶在選擇視圖中的一行之後選擇兩種類型的結果。然而,當我在pickerview中選擇一行時,它會顯示選定段的結果,但我選擇另一個段,它不會做任何事情,直到我再次選擇該行。在選擇細分後,我們如何回憶PickView的didSelectRow?

這裏是我的代碼:

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

i=row; 
switch (i) { 
    case 0: 


case 1 
if(_segment.selectedSegmentIndex == 1){ 

     [self Fquarter]; 
     [self Tquarter]; 
     [self Ten]; 
     [self Twenty]; 
     [self Fourty]; 
     [self Fifty]; 


     NSLog(@"AUDIO 10 MINS"); 
     } 

     if(_segment.selectedSegmentIndex == 0){ 

      [self SFquarter]; 
      [self STquarter]; 
      [self STen]; 
      [self STwenty]; 
      [self SFourty]; 
      [self SFifty]; 

      NSLog(@"Visual 10 MINS"); 
     } 

,它就像對於每一種情況下,我錯過了什麼?

+0

當然,這會發生。 pickerView:didSelectRow:inComponent:僅在更改選取器中的行選擇時調用。當您在分段控件中選擇另一個段時,不會再次調用它。另外,你在做什麼「案例1」?不能在switch語句中使用它。 – rdelmar 2013-04-08 23:22:56

+0

@rdelmar我在一個開關裏面,我只顯示我的代碼的一部分,但我剛剛編輯我的Q來表明。那麼,你在暗示什麼?我該如何回憶didSelectRow? – user1949873 2013-04-08 23:35:51

回答

2

我想你需要調用一個方法,它具有picker委託方法和分段控制的action方法中的所有[self Fquarter]等聲明。像這樣的東西(pickerSelectedRow是類型爲NSInteger的屬性):

@interface ViewController() 
@property (weak,nonatomic) IBOutlet UISegmentedControl *segment; 
@property (nonatomic) NSInteger pickerSelectedRow; 
@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 
    self.pickerSelectedRow = row; 
    [self doStuff]; 

} 

-(IBAction)segmentChosen:(UISegmentedControl *)sender { 
    [self doStuff]; 
} 


-(void)doStuff { 
    switch (self.pickerSelectedRow) { 
     case 0: 

     case 1: 
      if(_segment.selectedSegmentIndex == 1){ 

       [self Fquarter]; 
       [self Tquarter]; 
       [self Ten]; 
       [self Twenty]; 
       [self Fourty]; 
       [self Fifty]; 


       NSLog(@"AUDIO 10 MINS"); 
      } 

      if(_segment.selectedSegmentIndex == 0){ 

       [self SFquarter]; 
       [self STquarter]; 
       [self STen]; 
       [self STwenty]; 
       [self SFourty]; 
       [self SFifty]; 

       NSLog(@"Visual 10 MINS"); 
      } 


    } 
} 

採用這種設置的,在這裏您設置值的方法被稱爲既可以當選擇器視圖價值變動或分段控件的值發生變化。

+0

謝謝!那麼,我是否應該像.h那樣聲明? '@財產(讀寫,非原子)NSInteger的pickerSelectedRow;' – user1949873 2013-04-09 00:43:54

+0

@ user1949873,這個應該沒問題,我通常只是做非原子爲整數。另外,除非你需要從其他類訪問它,否則它應該放在.m文件頂部的類擴展中,而不是放在.h中。 – rdelmar 2013-04-09 00:51:11

+0

我認爲我沒有以正確的方式宣佈它。你能否把它添加到你的答案? – user1949873 2013-04-09 01:05:27

相關問題