2012-10-20 61 views
0

所以我使用一個uitableview來顯示多個圖像和標籤。我希望能夠檢查單擊的單元格的標籤文本,以便我可以識別哪個單元被點擊。UITableViewCell問題並檢查點擊

我這樣做的原因是因爲我想爲一個被單擊的單元格執行不同的操作,另一個單元格執行另一個操作。

這是我如何填充我的細胞(從一個原型細胞)從一個名爲CustomCell

//tableview datasource delegate methods 
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
return 1; 
} 
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
return cellIconNames.count; 
} 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath{ 

static NSString *CellIdentifier = @"Cell"; 

cellIconName = [cellIconNames objectAtIndex:indexPath.row]; 


NSString *cellIconImageName = [[self cellIconImages] objectAtIndex:[indexPath row]]; 

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 


if(cell == nil){ 
    cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
cell.rightLabel.text = [cellIconNames objectAtIndex:indexPath.row]; 
cell.carrierImage.image = [UIImage imageNamed:cellIconImageName]; 
cell.urlString = [cellIconNames objectAtIndex:indexPath.row]; 

return cell; 
} 

我檢查,看看點擊其中一個方式類細胞defenition是這樣做的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;{ 

CustomCell *cell = (CustomCell*)[tableView cellForRowAtIndexPath:indexPath]; 
//[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.google.com"]]; 

if ([cell.urlString isEqualToString:@"Aetna"]) { 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.aetna.com"]]; 
}else if([cell.urlString isEqualToString:nil]){ 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.google.com"]]; 
} 
NSLog(@"cell was clicked %@", cell); 
} 

當我點擊一個單元格時,沒有任何反應。現在我已經制作了NSLOG,這樣我就可以確保它們正在被正確讀取。

我也註釋掉了我的測試代碼行,我把if語句註釋掉了,只運行了一行註釋代碼行,沒有任何反應。

請幫助我,我不知道是怎麼回事錯誤:/

回答

1

嘗試將URL方法放入字符串中(例如http://)。

+0

這樣一個簡單的答案我從來沒有考慮過它,爲什麼這會改變什麼?出於好奇(它的工作) – tyler53

+0

當你考慮到你可以創建自己的URL方法並註冊它們來使用基本上與你在那裏使用的相同的UIApplication調用來啓動其他程序時,這是有道理的。 –

0

只是雙重檢查,你倆都加入您的UITableViewController作爲的UITableViewDelegate和要麼通過程序或在Interface Builder了有線委託回到你的控制器?

+0

self.carrierTableView.delegate = self; self.carrierTableView.dataSource = self; – tyler53

0

在你的didSelectRowAtIndexPath方法中,你根本不應該看細胞。您應該查看數據模型中的數據。就像您在cellForRowAtIndexPath中所做的那樣,獲取indexPath的數據。然後對數據進行適當的檢查。

+0

這是什麼意思?我需要獲取該特定單元格中被選中的標籤的文本,以便我可以檢查它是哪一個 – tyler53

+0

@Maddy或者您是否在說我可以通過單元格數組索引來檢查的tableview?如果是這種情況,我會怎麼做 – tyler53

+0

我已經說過要做什麼。使用indexPath完全像你在cellForRowAtIndexPath:方法中獲取數據一樣。一旦獲得了數據,就可以做任何你需要處理的數據。細胞只是一個視圖。您的數據源包含您應該使用的實際數據。 – rmaddy

0

我不知道爲什麼你不能很容易地理解它,只需要在didSelectRowAtIndexPath中使用indexpath.row,你就可以簡單地獲得所需的單元格。