2014-01-25 81 views
0

所以我有一個有兩個標籤的ios應用程序。第一個選項卡有一個UIGestureRecognizer,一旦其TAPPED調用倒計數方法。NSNotificationCenter和Tap方法調用

第二個標籤有一個帶有三個選項的UIPickerView。

這就是我在我的secondTab的視圖控制器代碼:

FirstViewController *firstvs = [[FirstViewController alloc] init]; 
    NSInteger selectedRow = [self.pickerView selectedRowInComponent: 0]; 


if (selectedRow == 0) { 
    NSLog(@"Invalid Row"); // This block will not do nothing 
} 
else if (selectedRow == 1) { 

    // Call a method in firstViewController 
    [firstvs smallSelection]; 

    [[NSNotificationCenter defaultCenter] 
             postNotificationName:@"smallSelection2" 
                       object:self]; 

} 
else if (selectedRow == 2) { 

    [firstvs mediumSelection]; 

    [[NSNotificationCenter defaultCenter] 
             postNotificationName:@"mediumSelection3" 
                       object:self]; 
} 
else if (selectedRow == 3){ 

    [firstvs largeSelection]; 

    [[NSNotificationCenter defaultCenter] 
             postNotificationName:@"largeSelection" 
                       object:self]; 
} 

這是什麼基本上做的是,如果用戶選擇可以說,第2行,在它的一個UILabel dispays用戶有什麼相同secondTab已選擇。

然後,該選擇將在NSNotificationCenter中廣播,如每個if和else塊下的代碼所示。

*我有3個NSnotificationCenter每個if語句,我清楚地不知道它是否安全地做到這一點或不是我的問題。

因此,當用戶選擇第2行時,在第一個選項卡的ViewController中,它會調用一個名爲mediumSelection的方法。

在FirstViewController.m:

-(void)mediumSelection { 
    // Other functions 
} 

但正如你可能會注意到我寧願用一個NSNotificationCenter保持firstViewController聽的,而不是因爲我被推薦使用NSNotificationCenter只是執行這個方法secondViewController的。 聲明本NSNotification廣播公司在選擇2 secondViewController:

[[NSNotificationCenter defaultCenter] 
    postNotificationName:@"mediumSelection3"object:self]; 

這播音員然後發送消息給聽衆如我從firstViewController現在代碼:

 - (id) init 
     { 
     self = [super init]; 
      if (!self) return nil; 
      [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(smallSelection2:) 
              name:@"smallSelection2" 
              object:nil]; 

      [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(mediumSelection3:) 
              name:@"mediumSelection3" 
              object:nil]; 

           return self; 
          } 

       - (void) smallSelection2:(NSNotification *) notification 
        { 
        if ([[notification name] isEqualToString:@"smallSelection2"]) 
        NSLog (@"SmallSelection is successfully received!"); 



                 } 
        - (void) mediumSelection3:(NSNotification *) notification 
        { 
         if ([[notification name] isEqualToString:@"mediumSelection3"]) 
         NSLog (@"mediumSelection is successfully received!"); 


         } 

所以這個作品,它將其記錄到控制檯中,因爲正在使用UIPicker進行滾動以接收選擇。現在是BIG問題和NSNotification的主要原因。

這Reciever代碼之前,我在上文中的UIGestureRecognizer並從水龍頭稱爲倒計時方法如下:

 -(void) viewDidLoad { 
     UITapGestureRecognizer *tapScreen = [[UITapGestureRecognizer alloc] initWithTarget:  self action:@selector(tapScreen:)]; 
[self.view addGestureRecognizer: tapScreen]; 
     } 

    - (void) tapScreen:(UIGestureRecognizer *)gr 
{ 
    NSLog(@"Screen has been tapped"); 

/* 
    CODE RELATED TO LABELS, NOTHING IMPORTANT 
*/ 

timer = [NSTimer scheduledTimerWithTimeInterval: 1 target: self selector:  @selector(countdown) userInfo: nil repeats: YES]; 

[[NSRunLoop currentRunLoop] addTimer:timer forMode: NSRunLoopCommonModes]; 

} 

-(void) countdown { 

/* 
MORE CODE BEING EXECUTED ON THE VIEW 
*/ 

NSLog(@"Program success: counting... %i", mainInteger); 

self.hoursLeft.text = [NSString stringWithFormat:@"%i hours", mainInteger]; 

self.percentGauge.text = [NSString stringWithFormat:@"%1.2f", subInteger]; 



     // FIGURE 1: 
     [self smallSelection]; 

    } 

現在的問題是我想要的倒計時根據選擇從NSNotificationCenter製造開始。因此,如果用戶從Picker中選擇第2行,倒計時將根據「小,中,大」方法進行選擇。

正如你所看到的,倒計數方法結束時它說「圖1:」我手動調用smallSelection方法,我想嵌入一個If語句來根據UIPicker檢查3種可能的選擇選擇,我正在使用NSNotificationCenter,因爲我正在測試,如果這是否會從我設置在secondViewController 上的實例調用:[firstvs smallSelection]。

因此,無論如何要添加一個if語句來檢查3個可能的選擇並在水龍頭上執行該方法?

回答

0

我會使用一個全局對象,其中所有值都寫下來,並從不同的視圖控制器中更改這些值。

所以你可以使用這個全局對象得到所有viewcontrollers值:

enter image description here

+0

這如何解決程序的調用方法的主要意圖時,點擊屏幕?這似乎更像是與代表團和單身人士一起工作? – DwellingNYC

相關問題