我正在展示一個WKInterfaceController
與另一個接口控制器的模式segue。WKInterfaceController與模態segue
當你在這個模式接口控制器的表中點擊一行時,我該如何解除這個接口控制器並且返回到呈現接口控制器?
這是我當前的故事板設置。
[Root] -> [Push 1] -> [Push 2] -> [Modal]
我正在展示一個WKInterfaceController
與另一個接口控制器的模式segue。WKInterfaceController與模態segue
當你在這個模式接口控制器的表中點擊一行時,我該如何解除這個接口控制器並且返回到呈現接口控制器?
這是我當前的故事板設置。
[Root] -> [Push 1] -> [Push 2] -> [Modal]
我假設你是NSNotificationCenter
友好。
起初,沒有辦法訪問父接口控制器,除非父控制器是根控制器。
[WKExtension sharedExtension].rootInterfaceController
基本上,不推薦接口控制器之間的直接通信:
根控制器可以通過訪問。改爲使用NotificationCenter
。因此,在你的模態控制器,做這樣的事情:
-(void) didTapARowInTable
{
NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:@"UseDidTapARowFromModal"
object:self
userInfo:@{/* data that will be needed
to present new modal here */}];
// close current modal.
[self dismissController];
}
其次,當它不活躍的一個在WKInterfaceController
任何UI代碼將無法正常工作。所有WKInterfaceObject
都是與真實的遠程用戶界面相連的查詢對象(您知道故事板文件位於單獨的包中)。當沒有顯示遠程用戶界面時,它的界面控制器被取消激活,並且不能將用戶界面修改查詢發送給真實UI對象。它只能在未激活時修改它自己的狀態。
因此,父控制器不應該訪問任何UI API,直到它被激活(例如顯示新的模式或更改WKInterface對象)。所以,在你的父母控制器做這樣的事情:
-(void)didReceiveTapRowNotification:(NSNotification*) note
{
// just remember task to perform, don't use any UI code here.
_taskInfo = note.userInfo;
}
-(void)willActivate
{
[super willActivate];
// check scheduled task and do it if exists.
if(_taskInfo){
[self presentControllerWithName:@"modal-name"
context:_taskInfo];
_taskInfo = nil;
}
}
謝謝!這確實有效,但呈現視圖控制器不是根視圖控制器,所以當彈出呈現視圖控制器(Push 2)時,我不會看到我將刪除此觀察者的位置。我用設置編輯了我的帖子。 –
使用相同的策略。由於沒有對'popController'的完成回調支持,當'Push2'彈出時選擇一個點的唯一方法是'[Push1 activated]'。當你從push1推push2時,你必須存儲一些狀態變量來指示push2是否出現,以確定'[Push1 activated]'上的適當行爲。 – jeeeyul
我最終只是在通知觀察者的'Push 2'接口控制器的一個靜態變量中,然後在之後的'-awakeFromContext:'調用中再次添加它之前刪除了觀察者。謝謝你的幫助! –