5

假设我有一个包含 10 个静态单元格的表格,有没有办法以编程方式选择某个单元格?

我试过这个

UITableViewCell *cell = [self.tableView.subviews objectAtIndex:indexPath.row];

但这似乎并没有真正返回表格单元格。

这似乎使我的代码崩溃

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

我试图在代码中为静态单元格设置单独的高度。一种选择是为每个单独的静态单元制作插座,但这似乎很愚蠢。

4

6 回答 6

16

要访问静态创建的单元格,请尝试以下操作:

UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

这适用于静态单元格。所以,如果你在...

- (UITableViewCell *)tableView:(UITableView *)tableView
     cellForRowAtIndexPath:(NSIndexPath *)indexPath {

     UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];

    return cell;

}

...委托,您可以使用上述声明访问所有静态配置的单元格。从那里,你可以用“细胞”做任何你想做的事。

我有一个 ViewController,上面有两个 UITableViews。其中一个具有使用 Storyboard 静态定义的单元格,另一个具有使用代码动态定义的单元格。鉴于我使用相同的 ViewController 作为两个表的委托,我需要防止在已经创建单元格的地方调用 cellForRowAtIndexPath 的地方创建新单元格。

在您的情况下,您需要以编程方式访问您的单元格。

玩得开心。

于 2013-03-07T17:03:53.640 回答
9

创建一个@IBOutlet.

即使您以编程方式重新排列静态单元格,这也将起作用。

于 2015-02-17T21:55:07.267 回答
1

你可以试试这个...

UITableViewCell *cell = (UITableViewCell*)[yourTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:rowvalue inSection:0]];
于 2013-02-06T10:54:58.053 回答
1

如果您需要访问单元格对象,那么使用 UITableViewCell 方法 cellForRowAtIndexPath 是非常合适的。

这可能只是传递单元格(如果它是可见的),或者调用您应该提供的委托方法 cellForRowAtIndexPath (不要混淆它们)。如果那个崩溃,那么深入挖掘并调查崩溃的根本原因。

于 2013-02-06T11:01:03.260 回答
0

使用table view delegate方法

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
     NSInteger height;  
     if(0 == indexPath.row)  
       {
          height = 44;
       }
     else
      {  
        height = 50;
      }
   return height;
}
于 2013-02-06T10:43:12.753 回答
0

这是一个 Swift 2.3。解决方案。

UITableViewController 是在 IB 中创建的。

/*
    NOTE
    The custom static cells must be
    In the IB tableview if one is being used 
    They also must be updated to be MYCustomTableViewCell 
    instead of UITableViewCell
*/
import UIKit

class MYCustomTableVC: UITableViewController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()
        // NO Nib registration is needed
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {
        let cell = super.tableView(tableView, cellForRowAtIndexPath: indexPath) as! MYCustomTableViewCell
        // MYCustomTableViewCell can be created programmatically 
        // without a Xib file 
        return cell
    }
}
于 2016-10-04T15:54:47.963 回答