所以我有一個有兩個標籤的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個可能的選擇並在水龍頭上執行該方法?
這如何解決程序的調用方法的主要意圖時,點擊屏幕?這似乎更像是與代表團和單身人士一起工作? – DwellingNYC