2013-12-22 105 views
3

我有一個表視圖的iOS的TableView如何訪問自定義單元格變量

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    **NSString *channelID = [object objectForKey:@"channelID"];** 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell==nil) 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle 
            reuseIdentifier:CellIdentifier]; 

} 

我訪問的tableview細胞像這樣:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    for (NSIndexPath *path in [tableView indexPathsForVisibleRows]) { 
     UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:path]; 
    } 
    //I want to access cell.ChannelID // 
} 

我如何可以訪問的channelID變量? 當用戶停止滾動時,我想訪問可見的單元格和自定義變量。

謝謝

+0

什麼是「對象」? – Moxy

回答

0

您確定channelID是UITableViewCell的成員嗎?如果您已經聲明UITableViewCell並使用您自己的自定義tableview單元格,則要使用該類別

4

如果您想要定製UITableView單元格,則需要創建UITableView單元格的子類。從那裏,你需要在這個自定義單元上爲你的對象聲明一個屬性。確保這個屬性是公開的。從我在你的代碼中看到的,它應該可能是這樣的。

@interface MyCustomCell : UITableViewCell 

@property (strong, nonatomic) NSDictionary *myObject; 

@end 

從那裏,你要的細胞亞類的頭導入到你的表視圖的委託/數據源的方法使用實現文件和而不是引用的UITableViewCell內的cellForRowAtIndexPath:引用您的子類,然後設置一個值給你新增加的屬性。

- (MyCustomCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (!cell) { 
     cell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; 
    } 

    NSString *channelID = [cell.myObject objectForKey:@"channelID"]; 

    [cell.textLabel setText:channelID]; 

    return cell; 
} 

當然,不言而喻,你首先需要提供邏輯來傳播這本詞典。然後就滾動視圖委託方法而言,你有類似的問題。您無法訪問UITableViewCell基類上的自定義對象。你再次需要引用你的子類。這可以通過簡單的演員輕鬆完成。

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    for (NSIndexPath *path in [tableView indexPathsForVisibleRows]) { 
     MyCustomCell *cell = (MyCustomCell *)[self.tableView cellForRowAtIndexPath:path]; 

     NSString *channelID = [cell.myObject objectForKey:@"channelID"]; 
     // 
    } 
} 
1

0x7fffffff答案有效。您也可以使用此功能並跳過空檢查。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell" forIndexPath:indexPath]; 

    NSString *channelID = [cell.myObject objectForKey:@"channelID"]; 

    [cell.textLabel setText:channelID]; 
} 

但你必須聲明什麼是「CustomCell」是在viewDidLoad中註冊它,否則你會得到一個異常:因爲它使dequeueReusableCellWithIdentifier: forIndexPath:是保證返回

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.tableView registerClass:[CustomCell class] forCellReuseIdentifier:@"CustomCell"]; 
} 

我喜歡這個更好細胞,並使cellForRowAtIndexPath有點清潔。但是,或者也可以。

+0

謝謝你....你救了我的一天.. –

相關問題