Я предполагаю, что вы дружите с 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
не будет работать, если он не активен. Все WKInterfaceObject
являются объектами запроса, которые связаны с реальными удаленными пользовательскими интерфейсами (вы знаете, что файлы раскадровки находятся в отдельном пакете). Когда удаленный пользовательский интерфейс не отображается, контроллер интерфейса для него деактивируется, и он больше не может отправлять запрос на изменение пользовательского интерфейса реальным объектам пользовательского интерфейса. Он может изменять свое собственное состояние только тогда, когда он не активирован.
Таким образом, родительский контроллер не должен получать доступ к любому 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;
}
}
person
jeeeyul
schedule
26.11.2015