【发布时间】:2015-03-09 05:23:37
【问题描述】:
我正在通过 Storyboard 在静态 UITableViewCell 中配置 UIPickerView。由于某种原因,加载Controller时UIPickerView没有出现。
故事板:
UIPickerView 是单元格内容视图的子项......并且表格视图被配置为显示“静态单元格”。 (分组样式)
UIPickerView 委托和数据源作为 Storyboard Connections Inspector 中的 Outlets 连接到 UITableViewController:
如果我以编程方式将 Picker 视图添加到表格单元格,在 viewDidLayoutSubviews 回调中,将出现 PickerView 并触发委托回调,以便可以使用数据配置 Picker。 (titleForRow 等):
在 TableViewController.m 中:
// Can't figure out why - but regionPicker view can't be added in viewDidLoad, so it gets added here
- (void) viewDidLayoutSubviews {
// For some reason regionPicker view gets pushed to top of view unless setting x & y to 0,0 here...
[self.regionPicker setFrame:CGRectMake(0, 0, 320, 162)];
// Add the regionPicker view as a subview to the regionPickerCell
[self.regionPickerCell.contentView addSubview:self.regionPicker];
}
这会导致 Picker 的正确初始化出现问题,因为每次在 UIPIckerView 中进行新选择时都会调用 viewDidLayoutSubviews。
这是我的 TableViewController.h 文件的样子:
@import UIKit;
@class DetailViewController;
@interface DetailViewController : UITableViewController<UIPickerViewDataSource, UIPickerViewDelegate>
@property (weak, nonatomic) IBOutlet UITableViewCell *regionCell;
@property (weak, nonatomic) IBOutlet UITableViewCell *regionPickerCell;
@property (weak, nonatomic) IBOutlet UIPickerView *regionPicker;
@end
通过 Storyboard 在静态 UITableViewContoller 中加载 UIPickerView 的正确方法是什么?
另外,我不知道这是否相关,但在这种情况下,表格视图控制器是通过 segue 从另一个 UITableViewController 加载的:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"configNotification"]) {
UINavigationController *navigationController = segue.destinationViewController;
// Here's the UITableViewController in question...
DetailViewController *detailViewController = [navigationController viewControllers][0];
NSIndexPath *selectedPath = [self.tableView indexPathForCell:sender];
}
}
非常感谢任何想法!
Xcode v6.1、SDK v8.1
【问题讨论】:
-
您检查过
reuseIdentifiers 的单元格吗? -
表格视图单元格的高度是多少?并检查您设置的值是否正确。
-
@UtkarshSingh - 我没有使用重用标识符...这些单元格是静态的。
-
@YogeshSuthar - 在情节提要中,包含的单元格从大小检查器设置为 164px 高。我很确定当视图加载时高度不是 0。此外,从调试器中,当在 viewDidLoad 中时,我可以执行
po self.regionPickerCell.contentView.subviews并且我看到没有任何子视图。 (空数组)在我以编程方式在 viewDidLayoutSubviews 中添加 UIPIckerView 后,Picker 确实出现在指定的单元格内。
标签: ios uitableview storyboard uipickerview