我不会在这个问题上进入原因,我只是解释我的需要。
我的utilatioon文件中有一个属性,如此...
@property (nonatomic, strong) MyCustomCell *customCell;
我需要在viewDidLoad上初始化它。我通过返回" self.customCell"来返回它作为同一indexPath的cellForRowAtIndexPath中的一行。
然而,它不起作用,我似乎没有在viewDidLoad中正确分配和初始化自定义单元格。 我该怎么做?如果您知道答案,请节省时间,不要再读。
好的,我会把为什么放在这里以防人们好奇。
我有一个表格视图,分为2个部分。第一部分总是显示1行(称之为A)。第二部分总是显示3行(称为X,Y,Z)。
如果点击A行(S0R0 [Section 0 Row]),S0R1中会出现一个新单元格。带有UIPickerView的单元格。用户可以从UIPickerView中选择数据,这将更新单元格A中的选定值。
细胞X,Y& Z都以同样的方式工作。每个都可以被点击,他们将使用各自的UIPickerView打开下面的另一个单元格。
我这样做的方式是,所有这些单元格都是在TableView的Storyboard中创建的,然后拖出View。 IBOutlets是为所有人创建的。然后在cellForRAIP中,我只返回self.myCustomCellA或self.myCustomCellY。
现在,这很有效,但我需要更多的定制。我需要使用自定义单元格,而不仅仅是UITableViewCell。因此,我没有将IBOutlets用于所有单元格(8个单元格,4个(A,X,Y,Z)及其4个隐藏/可切换的UIPickerView单元格),而是在我的实现文件中为它们创建了@properties。但它使用标准的UITableViewCell并没有像之前那样工作。
我不确定我是否正确初始化它们?如何在viewDidLoad中正确初始化它们以便我可以使用它们?
的.m
@interface MyViewController ()
@property (strong, nonatomic) MyCustomCell *myCustomCellA;
...
viewDidLoad中
...
self.myCustomCellA = [[MyCustomCell alloc] init];
...
的cellForRowAtIndexPath
...
return self.myCustomCellA;
...
答案 0 :(得分:0)
如果只是我理解你的问题,你有3个选择:
initWithStyle:reuseIdentifier:
创建单元格,以在表视图生命周期之外实例化它们,并实现完全自定义逻辑。你应该在viewDidLoad
中做什么,你不会在其他地方做。如果您的代码遇到特殊问题,请发布一个代码段,以便社区可以为您提供帮助
答案 1 :(得分:0)
我建议你将故事板中的所有单元格(日期选择器位于正确的位置)声明为静态表,然后覆盖tableView:heightForRowAtIndexPath:
定义BOOL以确定选择器可见性及其在表中的位置
#define DATE_PICKER_INDEXPATH [NSIndexPath indexPathForRow:1 inSection:0]
@interface YourViewController ()
@property (assign, nonatomic) BOOL isPickerVisible;
@end
然后设置初始值
- (void)viewDidLoad {
[super viewDidLoad];
self.isPickerVisible = YES;
}
覆盖tableView委托方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if ([indexPath isEqual:DATE_PICKER_INDEXPATH] && !self.isPickerVisible) {
return 0;
} else {
return [super tableView:tableView heightForRowAtIndexPath:indexPath];
}
}
最后创建切换选择器的方法
- (void)togglePicker:(id)sender {
self.isPickerVisible = !self.isPickerVisible;
[self.tableView beginUpdates];
[self.tableView endUpdates];
}
你可以在tableView中调用:didSelectRowAtIndexPath:
根据你的问题,你可以创建索引路径的对(NSDictionary)和bool(如果它可见)并根据它显示/隐藏它们。
答案 2 :(得分:0)
这就是我要找的东西:
MyCustomCell *cell = (MyCustomCell *)[[[UINib nibWithNibName:@"MyNibName" bundle:nil] instantiateWithOwner:self options:nil] firstObject];