6

accessoriesView を UITableViewCellAccessoryCheckmark に設定している場合、テキストを UITableViewCell の中央に配置しようとしています。このクラスではストーリーボードも使用しています。

ここに私が望まないもののスクリーンショットがあります。

テキストが左にインデントされないようにするにはどうすればよいですか?

ここに画像の説明を入力

私の willDisplayCell メソッド..

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == [self cellToCheckmark]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else {
        NSLog(@"Not Being Checked");
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

cell.textLabel.textAlignment = UITextAlignmentCenter;

    if (cell.shouldIndentWhileEditing == YES) {
        cell.shouldIndentWhileEditing = NO;
    }
}

CellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = nil;

    static NSString *CellIdentifier = @"Cell";
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.textAlignment = UITextAlignmentCenter;

    if (indexPath.section == 0) {
        switch (indexPath.row) {
            case 0:
                cell.textLabel.text = @"Google";
                break;

            case 1:
                cell.textLabel.text = @"Bing";
                break;

            case 2:
                cell.textLabel.text = @"Yahoo!";
                break;

            default:
                break;
        }
    }

    if (indexPath.row == [self cellToCheckmark]) {
        NSLog(@"Being Checked");
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else {
        NSLog(@"Not Being Checked");
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    if (cell.shouldIndentWhileEditing == YES) {
        cell.shouldIndentWhileEditing = NO;
    }   
    return cell;
}
4

5 に答える 5

9

あなたがする必要がある2つのことがあります:

まず、テーブル スタイルを Default: に設定する必要がありますUITableViewCellStyleDefault。他のすべてのスタイルdetailTextLabelは何らかの形で a を使用しており、textLabel の配置プロパティを設定することはできません。

[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier]

次に、セルの textLabel の配置を設定できます。

cell.textLabel.textAlignment = NSTextAlignmentCenter;

次に、データが必要とするものに基づいて、アクセサリをチェックマークに設定します。

cell.accessoryType = ( myDataMatches ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone );

スクリーンショット

ここに画像の説明を入力

于 2012-05-31T21:47:26.433 に答える
7

iOS 8 以降のソリューション:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    cell.textLabel.text = ...;
    if (/* your condition */) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        cell.layoutMargins = UIEdgeInsetsMake(0, 40, 0, 10);
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.layoutMargins = UIEdgeInsetsMake(0, 10, 0, 10);
    }
    return cell;
}
于 2015-12-10T21:42:54.217 に答える
2

はるかに簡単な答えがあるようです (この回答を参照してください)。つまり、セルのコンテンツ ビューでラベルを中央に配置します。代わりに、セル自体の中央に配置すると、移動しません。

試してみたところ、iOS 11.2で動作します。

ここに画像の説明を入力

于 2018-02-13T08:47:48.130 に答える
1

これらのソリューションは、デフォルトのセルで機能します。独自のカスタム セルがある場合、それを行う最も簡単な方法は、ラベルに左マージンと右マージンの両方に制約を持たせ、左マージン制約のアウトレットを作成し、その定数をcellForRowAtIndexPathメソッドに設定することです。

    cell.accessoryType = isChosen ? .checkmark : .none
    cell.leftMarginConstraint.constant = isChosen ? 40 : 0

このようにして、accessoryType に追加された右マージンが左にも追加されます。

于 2016-11-01T10:31:52.963 に答える