私UITableViewCell
にはUIButton
、ユーザーがタッチしたときにテーブルセルの特定のオブジェクトで指定された電話番号に電話をかけると想定される電話を表す があります。
複数のボタンがあり、各ボタンには特定の電話番号があるため、tag
プロパティをUIButton
currentに設定しようとしていますindexPath.row
が、最初の 6 つのセルでは機能しますが、セルが再利用され始めると、タグは 0 に戻りますすべてのボタンに。ボタンのタグを再利用ブロックの外に設定しています。これは、一意の各セルを識別するためにこれを行う適切な方法であると考えました。
テストのために、cell.tag
プロパティも に設定しましたがindexPath.row
、完全に機能するため、UIButton に確実に分離されています。私が間違っているかもしれないことについてのアイデアはありますか?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *SchoolCellIdentifer = @"SchoolCellIdentifier";
SchoolInfoItem *item = [self.schoolArray objectAtIndex:indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SchoolCellIdentifer];
// If the cell doesn't existing go ahead and make it fresh.
if (cell == nil)
{
// Begin Phone button view
UIButton *phoneButton = [[UIButton alloc] initWithFrame:CGRectMake(67, 70, 35, 35)];
phoneButton.tag = 80;
UIImageView *phoneView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"phone-icon.png"]];
phoneView.frame = CGRectMake(2.5, 2.5, 30, 30);
[phoneButton addSubview:phoneView];
[cell.contentView addSubview:phoneButton];
}
cell.tag = indexPath.row;
phoneButton = (UIButton *) [cell viewWithTag:80];
[phoneButton addTarget:self action:@selector(callPhoneNumber:) forControlEvents:UIControlEventTouchUpInside];
phoneButton.tag = cell.tag;
NSLog(@"phoneButton tag: %d", phoneButton.tag);
NSLog(@"cell tag:%d", cell.tag);
return cell
}
TouchEvent のメソッドは次のとおりです。
- (void) callPhoneNumber:(id)sender
{
UIButton *button = (UIButton *) sender;
SchoolInfoItem *schoolItem = [self.schoolArray objectAtIndex:button.tag];
NSLog(@"tag at: %d", button.tag);
if ([schoolItem.MainPhone length] != 0)
{
NSString *URLString = [@"tel://" stringByAppendingString:schoolItem.MainPhone];
NSURL *URL = [NSURL URLWithString:URLString];
NSLog(@"%@", URL);
[[UIApplication sharedApplication] openURL:URL];
}
}