我通过Storyboard在静态UITableViewCell中配置UIPickerView。出于某种原因,加载Controller时不会出现UIPickerView。
故事板:
UIPickerView是Cell Content View的子级...并且Table View配置为显示" Static Cells"。 (分组式)
UIPickerView委托和dataSource在故事板连接检查器中作为Outlets连接到UITableViewController:
如果我以编程方式将Picker View添加到Table Cell,在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的正确方法是什么?
另外,我不知道这是否相关,但在这种情况下,表视图控制器是通过另一个UITableViewController的segue加载的:
- (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
答案 0 :(得分:0)
我通过从故事板中删除此控制器中的现有选择器视图,然后再添加每个视图来解决此问题。
出于某种原因,Picker View在Storyboard视图中显示为灰色。 (上面的第一张图片)删除Picker View并将其添加回来后,它并没有变灰。我不知道为什么Picker View首先是灰色的,或者说是故事板中的含义,但希望这将有助于未来的人。