iOS:在拆分视图的主(根)视图之上显示一个新的模式视图

Posted

技术标签:

【中文标题】iOS:在拆分视图的主(根)视图之上显示一个新的模式视图【英文标题】:iOS: Displaying a new modal view on top of master (root) view in split view 【发布时间】:2011-03-18 15:17:35 【问题描述】:

从初始列表(tableview)中选择特定对象后,我需要在主视图区域中调用一个新的模态视图。

试过这个:

//new view init:
    clientList *clientListCon = [[clientList alloc] initWithNibName:@"clientList" bundle:nil];
//pushing   
 [[splitViewController.viewControllers objectAtIndex:0] presentModalViewController:clientListCon animated:YES];

我得到的一切:

MultipleDetailViews[12997:40b] -[UITableView presentModalViewController:animated:]: unrecognized selector sent to instance 0x584d800
2011-03-18 14:40:51.449 MultipleDetailViews[12997:40b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableView presentModalViewController:animated:]: unrecognized selector sent to instance 0x584d800'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x017035a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x01857313 objc_exception_throw + 44
    2   CoreFoundation                      0x017050bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x01674966 ___forwarding___ + 966
    4   CoreFoundation                      0x01674522 _CF_forwarding_prep_0 + 50
    5   MultipleDetailViews                 0x00008051 -[RootViewController tableView:didSelectRowAtIndexPath:] + 354
    6   UIKit                               0x00a8fb68 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140
    7   UIKit                               0x00a85b05 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 219
    8   Foundation                          0x0079779e __NSFireDelayedPerform + 441
    9   CoreFoundation                      0x016e48c3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
    10  CoreFoundation                      0x016e5e74 __CFRunLoopDoTimer + 1220
    11  CoreFoundation                      0x016422c9 __CFRunLoopRun + 1817
    12  CoreFoundation                      0x01641840 CFRunLoopRunSpecific + 208
    13  CoreFoundation                      0x01641761 CFRunLoopRunInMode + 97
    14  GraphicsServices                    0x0205a1c4 GSEventRunModal + 217
    15  GraphicsServices                    0x0205a289 GSEventRun + 115
    16  UIKit                               0x00a26c93 UIApplicationMain + 1160
    17  MultipleDetailViews                 0x000069a4 main + 102
    18  MultipleDetailViews                 0x00006935 start + 53
)
terminate called after throwing an instance of 'NSException'

【问题讨论】:

【参考方案1】:

好像应该是这样的:

[self presentModalViewController:clientListCon animated:YES];

我不知道您是如何从提供的代码中获得对 UITableView 的引用。

【讨论】:

在这种情况下,clientListCon 以全屏模式打开。我希望它只覆盖根视图。 UITable 来自通用的 SplitView 声明 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath //我需要: NSUInteger row = indexPath.row; if (row == 0) 推送一个新的模态控制器 这是可行的:[self.navigationController pushViewController:clientListCon animated:YES];但我正在寻找一种不使用导航控制器来显示模式视图的方法。 您正在寻找的效果是相当专业的,您不会找到任何开箱即用的解决方案。

以上是关于iOS:在拆分视图的主(根)视图之上显示一个新的模式视图的主要内容,如果未能解决你的问题,请参考以下文章

交替使用拆分视图控制器和导航控制器作为窗口根视图控制器

动态设置拆分视图控制器为根视图控制器IOS

在 iOS 拆分视图控制器上推送新的视图控制器

根视图控制器的子视图控制器位于根之上

在所有内容之上显示一个 UIAlertController 并保持在顶部,即使推送另一个视图(iOS 13)

拆分视图控制器中的 iOS 静态页脚