【问题标题】:Static UITableViewController with UIPickerView fails to load UIPickerView带有 UIPickerView 的静态 UITableViewController 无法加载 UIPickerView
【发布时间】: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


【解决方案1】:

我解决了这个问题,方法是从 Storyboard 中删除此控制器中现有的选取器视图,然后将每个视图添加回去。

由于某种原因,故事板视图中的选取器视图呈灰色显示。 (上面的第一张图片)删除 Picker View 并将其添加回来后,它没有变灰。我不知道为什么选择器视图首先是灰色的,或者从情节提要中表示什么,但希望这对将来的人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多