2014-11-06 26 views
0

我爲我的UIBarButtonItem(refreshIndicator.m)創建了一個自定義類。這個按鈕將在許多不同的視圖控制器上,所有的視圖都從我的MainViewController/NavigationController進行推送。檢查我的自定義按鈕類是哪個UIViewController而不是Storyboard

而不是將出口拖到iPhone故事板的每個ViewController.m文件然後iPad故事板(呃,仍然針對iOS7),我想知道是否有一種方法可以簡單地在我的UIBarButtonItem自定義類中完成我的任務。我環顧四周,但我還沒有完全找到答案,

我所需要做的就是檢查哪個UIViewController存在,檢查上次刷新頁面的時間,然後基於該時間,爲UIBarButtonItem設置圖像。 (儘管我有這個部分,除非有人有更好的建議)。我如何檢查自定義按鈕類中的當前UIViewController?這可能嗎?

回答

2

是否需要知道哪個視圖控制器它的,所以它可以告訴vc它被按下?如果是這種情況,請使用按鈕的繼承目標和操作屬性。在包含該按鈕的一個實例每一個VC,鑑於沒有負載:

self.myRefreshIndicator.target = self; 
self.myRefreshIndicator.action = @selector(myRefreshIndicatorTapped:); 

- (void)myRefreshIndicatorTapped:(id)sender { 
    // do whatever 
} 

更一般地,它能夠更好地有關於模型流從VC的看法知識,以及用戶操作的知識,從流觀點。根據這一原理,您的自定義按鈕,可以像一個方法:

- (void)timeIntervalSinceLastRefresh:(NSTimeInterval)seconds { 
    // change how I look based on how many seconds are passed 
} 

而且你的VCS:

NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:self.lastRefreshDate]; 
[self.myRefreshIndicator timeIntervalSinceLastRefresh:interval]; 

如果你真的必須從子視圖視圖控制器走了,你可以按照響應鏈如a few of the answers here(但我會竭盡全力避免這種事情)建議。

+0

不,不幸的是,竊聽行動是照顧。基本上,它需要知道它的哪個ViewController,以便它可以檢查上次刷新頁面的時間並顯示該按鈕的正確圖像。 (我會編輯問題) – 2014-11-06 20:37:12

+0

我認爲我們仍然可以通過保持模型信息流向*視圖來處理這個問題。請參閱編輯。 – danh 2014-11-06 20:43:44

+0

啊哈!這是有道理的。謝謝! – 2014-11-06 20:59:37

0

可以做到這一點,但解決方案是一切,但優雅。這是避開iOS基本原理的一種方式,並且強烈不鼓勵。

其中一種方法是遍歷響應者鏈,發佈者Phil M

另一種方法是查看視圖控制器的所有子視圖,直到找到按鈕。

這兩種方式都被認爲是不好的做法,應該避免。

對於你的具體情況,我會重新思考有一個單獨的酒吧按鈕實例的結構。例如,您可以將其重寫爲一個顯示在每個視圖控制器上的單個UIButton實例,並且它也可以充當單例。

相關問題