iPad:iOS5 的 Popover 示例

Posted

技术标签:

【中文标题】iPad:iOS5 的 Popover 示例【英文标题】:iPad:Popover sample to iOS5 【发布时间】:2012-02-27 13:32:55 【问题描述】:

我正在开发一款可在 iPhone 和 iPad 上使用的应用程序。

今天我发现我应该在操作表上使用 Popover for iPad 而不是 PickerView。

我正在尝试在 ios5 上使用示例应用程序,但出现错误;

*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因: '-[UITableViewController loadView] 加载了“2-view-5”笔尖,但没有得到 UITableView。' *** 首先抛出调用栈:

你知道我到底需要做什么来解决这个问题吗? 还有,你有什么推荐的 iOS5 的 popover 例子吗?

UYLMasterViewController.m
#import "UYLMasterViewController.h"
#import "UYLDetailViewController.h"

@implementation UYLMasterViewController

@synthesize detailViewController = _detailViewController;

#pragma mark -
#pragma mark === View Management ===
#pragma mark -

- (void)viewDidUnload

[super viewDidUnload];
self.detailViewController = nil;





- (BOOL)shouldAutorotateToInterfaceOrientation:   (UIInterfaceOrientation)interfaceOrientation

return YES;


#pragma mark -
#pragma mark === Table View Delegates ===
#pragma mark -

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

return 20;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];


NSUInteger row = [indexPath row];
cell.textLabel.text = [NSString stringWithFormat:@"Item %u", row+1];
return cell;


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

NSUInteger item = [indexPath row] +1;
NSNumber *detailItem = [NSNumber numberWithInteger:item];

if (self.detailViewController)

    self.detailViewController.detailItem = detailItem;



@end

【问题讨论】:

【参考方案1】:

如果您没有修改示例应用程序中的任何内容,这很奇怪。 无论如何,当我忘记设置从表到控制器 UITableViewController 的 IBOutlet 连接时,我通常会收到此错误。

很可能是你误删了它,或者 Xcode 由于某种原因失去了连接(这种情况发生了)。

查看 UYLMasterViewController.h 是否为 UITableViewController。如果是,那么 UITableView 必须是 nib 文件中的第一个视图,直接连接到控制器的 'view' IBOutlet 属性。 否则,如果 UITableView 在 UIView 内,那么您会得到您提到的确切错误。

一个可能的解决方案,如果 UITableView 不是主视图,将 UYLMasterViewController 设置为普通 UIViewController 并给它所有的委托访问器,然后从 UITableView 拖一个连接到控制器,你会看到你有两个选项委托和数据源,你需要两者。

【讨论】:

嗨,我找不到任何适用于 iOS5 的示例,因此使用适用于 ios4 的示例。所以当我下载一个示例时,我必须转换适合 ios5 的代码。我创建了 IBOutlet 并连接到页面上的 tableView,没有运气。 嗯,你要连接的控制器是 UITableViewController 吗?如果是,应该已经有一个名为 tableView 的属性,您应该将 UITableView 连接到该属性,而不是创建一个新的。 不确定我需要什么表格视图。我编辑了我正在使用的示例代码(它是其中之一......而不是苹果的),并使用故事板。我不知道如何在 ViewController 上连接 tableview。 如果您创建一个新项目并使用“Utility”模板并设置为 Universal,它在 iPhone 中使用模态视图作为全屏,在 iPad 中作为弹出框使用。这就是我要开始的地方,因为你正在寻找一个例子。 这很棒,因为它只使用 1 个 NIB。

以上是关于iPad:iOS5 的 Popover 示例的主要内容,如果未能解决你的问题,请参考以下文章

iOS 5.1.1 Popover 不会自动关闭

如何在 ipad 中创建 Popover? [关闭]

iPad上有啥样的popover

如何删除 iPad 的 Popover 箭头及其边框

iPad 纵向模式下的拆分视图 - 弹出按钮标题

带有 PopOver 控件的 IPad 按钮下拉菜单