gpt4 book ai didi

ios - 如何将单元格添加到静态部分 UITableView?

转载 作者:可可西里 更新时间:2023-11-01 06:23:12 25 4
gpt4 key购买 nike

我有点迷茫

   - (IBAction)addEmailField:(id)sender {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
UITableViewCell *Cell = [self.tableView cellForRowAtIndexPath:indexPath];

[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationRight];
[self.tableView endUpdates];

}

这甚至无法编译,我阅读了文档,我知道我必须向它传递一个 NSarray。但我不明白如何将单元格添加到该数组中

最佳答案

有 2 种可能的方案可以解决您的问题:

1. 如果您有一个静态的 UITableView,即在 XIB 或 Storyboard 中设置的所有单元格,您不能插入或删除单元格,因为您的整个表格 View 是通过 Interface Builder 配置的,并且因此不能修改。解决这个问题的方法是在 Interface Builder 中配置所有单元格(包括那些需要稍后显示的单元格),然后在运行时设置它们的高度:

    // This will show or hide the first row in first section depending on the value of
// BOOL _firstRowVisible instance variable that you set elsewhere in your code.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.section == 0 && indexPath.row == 0)
return _firstRowVisible ? 44 : 0;
return 44;
}

// To show or hide the first row in first section.
// Note that you need to call both -reloadRowsAtIndexPaths:withRowAnimation:
// and -reloadData to make this work.
- (IBAction)showOrHideEmailField:(id)sender
{
_firstRowVisible = !_firstRowVisible;
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView reloadData];
}

2. 如果您有动态单元格,您可以在 Interface Builder 中设置它们的外观,为每个单元格类型设置自己的重用标识符。然后,在代码中,在 -tableView:cellForRowAtIndexPath: 中,通过将相应的单元格标识符传递给 UITableView 的 -dequeueReusableCellWithIdentifier:forIndexPath: 和适本地设置您的手机。

要使用 -insertRowsAtIndexPaths:withRowAnimation:,您需要先更新数据源,以使 View 与模型保持同步。因此,对于您的情况,以下代码可能有效:

@property (assign, nonatomic) NSInteger numberOfEmailFields;

#pragma mark - Table View Data Source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
switch (section) {
case 0:
return 6;
case 1:
return self.numberOfEmailFields + 1;
default:
return 0;
}
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.section) {
case 0:
{
switch (indexPath.row) {
case 0:
{
// Dequeue, set up and return a cell with corresponding reuse identifier
static NSString *CellIdentifier = @"MyCell";
return [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
}
...
default:
break;
}
break;
}
default:
break;
}
return nil;
}

- (IBAction)addEmailField:(id)sender
{
// Update data source
self.numberOfEmailFields++;

// Animate rows
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:1];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationRight];
}

我创建了一个 sample project针对您使用动态单元格方法的场景。

请注意,要能够将单元格添加到 TableView 中,您需要使用第二种情况,即使用动态单元格。乍一看,这似乎需要更多工作,但这种方法在未来更具可扩展性和更容易修改。

关于ios - 如何将单元格添加到静态部分 UITableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21947223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com