1

だから、これは私を狂わせています...私のデータソース:NSMutableArrray_namesには、 UITableViewnamesTableに表示される行よりも多くの項目が含まれている場合を除いて、すべてがうまく機能します。その後、すべての地獄が解き放たれます...セルは互いに重なり合っており、空のセルがあり、セルが繰り返されています。

これが私のセットアップコードです。

    @interface DetailViewController ()
    {
        NSMutableArray *_names;
    }

私のviewDidLoadメソッド:

    - (void) viewDidLoad
    {
        [super viewDidLoad];
        self.navigationController.toolbar.barStyle = UIBarStyleBlackOpaque;
        [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleBlackOpaque];

        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(handleBack:)];

        self.navigationItem.leftBarButtonItem = backButton;
        if (!_names)
            _names = [[NSMutableArray alloc] init];
    }

およびcellForRowAtIndexPath:

    - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *cellId = @"MyCustomCell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
        UITextField *nameTextField;

        if (!cell || refreshCells)
        {
             cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
                                                                  self.view.bounds.origin.y+10,
                                                                  self.view.bounds.size.width-19,
                                                                  26.0)];*/
             nameTextField = [[UITextField alloc] initWithFrame:CGRectMake(self.view.bounds.origin.x+10,
                                                                  self.view.bounds.origin.y+4,
                                                                  self.view.bounds.size.width-19,
                                                                  34.0)];
        }

        nameTextField.adjustsFontSizeToFitWidth = YES;
        nameTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
        nameTextField.backgroundColor = [UIColor clearColor];
        nameTextField.autocorrectionType = UITextAutocorrectionTypeNo;
        nameTextField.autocapitalizationType = UITextAutocapitalizationTypeWords;
        nameTextField.textAlignment = UITextAlignmentLeft;
        nameTextField.font = [UIFont fontWithName:@"Noteworthy-Bold" size:22.0];
        nameTextField.keyboardType = UIKeyboardTypeDefault;
        nameTextField.returnKeyType = UIReturnKeyDone;
        nameTextField.clearButtonMode = UITextFieldViewModeNever;
        nameTextField.delegate = self;
        nameTextField.userInteractionEnabled = NO;

        NSString *object = _names[indexPath.row];
        nameTextField.text = [object description];
        [cell.contentView addSubview:nameTextField];
        cell.selectionStyle = UITableViewCellEditingStyleNone;

        return cell;
    }

誰か、私が間違っていることを教えてください。

4

2 に答える 2

0

これだけのコードを書く代わりに、XIBを使用してセルを設計できます。また、そのrefreshCellsは何ですか?また、アレイのどこにデータを追加していますか?

XIBとIBOutletでセルを設計してみてください。次に、cellForRowにロードします...

コード内で、セルに1つのテキストフィールドを追加するたびに

[cell.contentView addSubview:nameTextField];

これはまったく必要ありません。

これで問題が解決する可能性があります。

于 2013-03-26T08:41:36.233 に答える
0

最終的にUITableViewCellをサブクラス化し、このコードのほとんどを次の場所に移動しました。

@implementation DetailViewCustomCell
@synthesize nameTextField;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        nameTextField = [[UITextField alloc] init];
        nameTextField.adjustsFontSizeToFitWidth = YES;
        nameTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
        nameTextField.backgroundColor = [UIColor clearColor];
        nameTextField.autocapitalizationType = UITextAutocapitalizationTypeWords;
        nameTextField.textAlignment = UITextAlignmentLeft;
        nameTextField.font = [UIFont fontWithName:@"Noteworthy-Bold" size:22.0];
        nameTextField.returnKeyType = UIReturnKeyDone;
        nameTextField.userInteractionEnabled = NO;

        [self.contentView addSubview:nameTextField];
        self.selectionStyle = UITableViewCellEditingStyleNone;
    }
    return self;
}

- (void)layoutSubviews
{
    [super layoutSubviews];
    CGRect contentRect = self.contentView.bounds;
    CGFloat boundsX = contentRect.origin.x+10;
    CGFloat boundsY = contentRect.origin.x+4;
    CGFloat boundsW = contentRect.size.width-19;
    CGRect frame;
    frame= CGRectMake(boundsX ,boundsY, boundsW, 34.0);
    nameTextField.frame = frame;
}

そして私のビューコントローラでは:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    DetailViewCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
        cell = [[DetailViewCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    NSString *object = _names[indexPath.row];
    cell.nameTextField.text = [object description];
    cell.nameTextField.delegate = self;

    return cell;
}

これは完璧に機能しました!

于 2013-03-28T00:25:39.717 に答える