4

iOS4 以降は正しく動作していた UITableViewCell に UIButton がありますが、iOS7 の更新以降は動作しなくなりました。基本的に空箱のイメージです。ユーザーが画像 (UIButton) をクリックすると、画像がチェックボックスに変わります。私はXIBを使用していません。誰か提案はありますか?前もって感謝します。

(私はすでに試しましたが、これはうまくいきませんでしたcontentView.userInteractionEnabled = NO;[cell bringSubviewToFront:button]

関連するコードを次に示します。

- (UITableViewCell *)taskCell:(NSIndexPath *)indexPath table:(UITableView *)localTableView managed:(NSManagedObject *)managedTask dateFormat:(NSDateFormatter *)localDateFormatter{
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [localTableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

        // Checkbox
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(-4.0f, -3.0f, 48.0f, 48.0f)];
        button.tag=kCellButtonViewTag;
        button.adjustsImageWhenHighlighted=NO;
        [button setImage:[UIImage imageNamed:@"uncheckedPriorityNone.png"] forState:UIControlStateNormal];
        [button addTarget:self action:@selector(toggleCheckedMode:) forControlEvents:UIControlEventTouchUpInside];
        [cell.contentView addSubview:button];
        [button release];
        }
}


- (IBAction)toggleCheckedMode:(id)sender{

    NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];

    UITableViewCell *clickedCell = (UITableViewCell *)[[sender superview] superview];
    NSIndexPath *indexPath = [self.tableView indexPathForCell:clickedCell];
    Task *localTask = [self.fetchedResultsController objectAtIndexPath:indexPath];

    UIButton *button = sender;
    [button setImage:[UIImage imageNamed:@"checkedGray.png"] forState:UIControlStateNormal];
}
4

5 に答える 5

0

同じ問題が見つかりました。iOS7 より前のバージョンと iOS7 のサポートを可能にする、私が思いついた最もクリーンなソリューションは、カスタム UIButton だけでなく、UITableViewCellのeditingAccessoryViewプロパティを使用することでした。

私の場合、NIB を使用していますが、違いはありません。したがって、あなたの場合は次のようになります。

    // Checkbox
    if (([[[UIDevice currentDevice] systemVersion] compare:(@"7.0") options:NSNumericSearch] != NSOrderedAscending)) {

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(-4.0f, -3.0f, 48.0f, 48.0f);

        self.editingAccessoryView = button;

        [self.editingAccessoryView setHidden:YES];
    }
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(-4.0f, -3.0f, 48.0f, 48.0f)];
    button.tag=kCellButtonViewTag;
    button.adjustsImageWhenHighlighted=NO;
    [button setImage:[UIImage imageNamed:@"uncheckedPriorityNone.png"] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(toggleCheckedMode:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:button];
    [button release];

ここでのポイントは、カスタム UIButton に対してアクションが引き続き追加されることですが、iOS7 では、別のボタンが同じサイズで作成され、editingAccessoryViewに設定されて非表示になります。それはトリックを作るはずです。

UITableView でEditing:YESを設定することを忘れないでください。

于 2013-10-18T15:12:58.210 に答える
0

UITableView で setEditing:YES/NO が必要な場合。ios7ではテーブルビューの階層が変更されているため、1つ下を使用する必要があります。

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1)

{          
  [(UITableView *)self.superview isEditing]    
}
    else    

{    
        [(UITableView *)self.superview.superview isEditing]    
}
于 2013-12-05T11:34:33.860 に答える