2013-02-06 93 views
3

說我有一個表格中有10個靜態單元格,有沒有辦法以編程方式選擇某個單元格?UITableViewController以編程方式訪問靜態單元格問題

我已經試過這

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

,但實際上並沒有返回它似乎是一個表格單元格。

這似乎崩潰我的代碼

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

我試着去設置單獨的高度爲在代碼中靜態細胞。一個選擇是爲每個單獨的靜態單元製作網點,但這看起來很愚蠢。

+0

你是什麼意思的「靜態細胞」?對於更普遍的答案:爲什麼你想直接訪問單元格?你在代碼中的哪個位置可以訪問它? –

+0

UITabelViews可以具有在代碼中生成的原型單元格,也可以在故事板(可選)中生成原型單元格,或者完全(通常)在故事板編輯器中生成的靜態單元格,並且單元格數量不會變化 – Fonix

回答

13

要訪問靜態創建的細胞,試試這個:

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的地方創建新的單元格,其中已經創建了單元格。

就你而言,你需要獲得對你的單元格的編程訪問權限。

玩得開心。

+0

嗨,我搜索遍佈堆棧溢出廣告找到你的解決方案。但是,我正在使用C#中的Xamarin.iOS。你有沒有任何指針如何讓這個工作Monotouch? – naffie

0

使用table view delegate方法

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSInteger height; 
    if(0 == indexPath.row) 
     { 
      height = 44; 
     } 
    else 
     { 
     height = 50; 
     } 
    return height; 
} 
+0

確實夠好,回答我的問題,但如果我還想爲單元格做其他事情呢?是否沒有辦法獲得對實際單元格對象的引用? – Fonix

+2

Anil建議,您必須使用委託消息來更新您的單元格。如果你想在索引3重新加載單元格,你應該調用reloadRowsAtIndexPaths:消息傳遞該行,然後調用你的tableView:cellForRowAtIndexPath:消息。 –

+0

確定這可能是我需要的 – Fonix

1

你可以試試這個...

UITableViewCell *cell = (UITableViewCell*)[yourTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:rowvalue inSection:0]]; 
1

如果您需要接入小區物體,然後使用的UITableViewCell方法的cellForRowAtIndexPath是相當合適的。

這可能只是通過單元格,如果它是可見的,或調用你應該提供的委託方法cellForRowAtIndexPath(不要混淆它們)。如果那一個崩潰,那麼深入挖掘並調查崩潰的根本原因。

5

創建一個@IBOutlet

即使您以編程方式重新排列靜態單元格,這也可以工作。

+0

一直在尋找一段時間!這是解決這個問題的最佳解決方案。 –

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 
    } 
}