0

我有 3 个表格单元格,它以某种方式显示最后一个单元格中的最后两个内容。我在代码的某个地方做错了,但我不知道在哪里,因为我只是按照教程并尝试在教程中做同样的事情,但是我想要 3 个可编辑的单元格而不是 2 个单元格。

在此处输入图像描述

完整代码:

#import "LocationAddViewController.h"
#import "Location.h"

@interface LocationAddViewController ()
- (void)prepareCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath;
- (UIBarButtonItem *)newCancelButton;
- (UIBarButtonItem *)newSaveButton;
- (UITextField *)newTextField;
@end

@implementation LocationAddViewController

@synthesize location;
@synthesize titleField;
@synthesize authorField;
@synthesize atextField;
@synthesize delegate;


- (void)dealloc {
    [location release];
    [titleField release];
    [authorField release];
    [atextField release];
    [super dealloc];
}


- (id)initWithLocation:(Location *)aLocation andDelegate:(id)aDelegate {
    if (self = [super initWithStyle:UITableViewStyleGrouped]) {
        self.location = aLocation;
        self.delegate = aDelegate;
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.allowsSelection = NO;

    titleField = [self newTextField];
    titleField.keyboardType = UIKeyboardTypeASCIICapable;
    [titleField becomeFirstResponder];

    authorField = [self newTextField];
    authorField.keyboardType = UIKeyboardTypeASCIICapable;

    atextField = [self newTextField];
    atextField.keyboardType = UIKeyboardTypeASCIICapable;

    if (location.onelocationId) {
        titleField.text = location.title;
        authorField.text = location.author;
        atextField.text = location.text;
    } else {
        titleField.placeholder = @"Title";
        authorField.placeholder = @"Author";
        atextField.placeholder = @"Text";
    }

    UIBarButtonItem *cancelButton = [self newCancelButton];
    self.navigationItem.leftBarButtonItem = cancelButton;
    [cancelButton release];

    UIBarButtonItem *saveButton = [self newSaveButton];
    self.navigationItem.rightBarButtonItem = saveButton;
    saveButton.enabled = NO;
    [saveButton release];        
} 

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    if (location.onelocationId) {
        self.title = @"Edit Location";
    } else {
        self.title = @"Add Location";
    }
}


-(IBAction)cancel {
    [self.navigationController popViewControllerAnimated:YES];
}

-(IBAction)save {
    location.title = titleField.text;
    location.author = authorField.text;
    location.text = atextField.text;

    [self.delegate didChangeLocation:location];
    [self.navigationController popViewControllerAnimated:YES];
}



- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section {
    return 3;
}

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

    UITableViewCell *cell = 
    [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                            reuseIdentifier:nil] autorelease];

    [self prepareCell:cell forIndexPath:indexPath];

    return cell;
}



- (void)prepareCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0)  {
        [cell.contentView addSubview:titleField];   
    } else { 
        [cell.contentView addSubview:authorField];
        [cell.contentView addSubview:atextField];
    }
}


- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder];
    if (textField == titleField) {
        [authorField becomeFirstResponder];
    }
    if (titleField == authorField) {
        [self save];
    }
    return YES;
} 

- (IBAction)textFieldChanged:(id)sender {
    BOOL enableSaveButton = 
    ([self.titleField.text length] > 0) && ([self.authorField.text length] > 0) && ([self.atextField.text length] > 0);
    [self.navigationItem.rightBarButtonItem setEnabled:enableSaveButton];
}

- (UIBarButtonItem *)newCancelButton {
    return [[UIBarButtonItem alloc] 
            initWithTitle:@"Cancel" 
            //auch im Original gelb
            style:UIBarButtonSystemItemCancel 
            target:self 
            action:@selector(cancel)];
}

- (UIBarButtonItem *)newSaveButton {
    return [[UIBarButtonItem alloc]
            initWithTitle:@"Save" 
            //auch im Original gelb
            style:UIBarButtonSystemItemSave
            target:self 
            action:@selector(save)];
}

- (UITextField *)newTextField {
    UITextField *textField = 
    [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 285, 25)];
    textField.font = [UIFont systemFontOfSize:16];
    textField.delegate = self;
    textField.returnKeyType = UIReturnKeyDone;
    textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    [textField addTarget:self 
                  action:@selector(textFieldChanged:) 
        forControlEvents:UIControlEventEditingChanged];
    return textField;
}  

@end

我想问题出在这里:

    - (void)prepareCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 0)  {
        [cell.contentView addSubview:titleField];   
    } else { 
        [cell.contentView addSubview:authorField];
        [cell.contentView addSubview:atextField];
    }
}

我对整个编程并不太感兴趣,但我想我必须编写 3 个 if 子句?(类似if (...) elsif (...) else (...))有人比我更了解吗?

4

4 回答 4

1

您对错误的来源是正确的。您在相同的坐标处添加authorField& 。atextField包含 s 的 3 个原因的正确方法if是:

if (/* condition 1 */) {

}
else if ( /* condition 2 */) {

}
else if ( /* condition 3 */) {

}
于 2012-06-26T08:44:56.203 回答
1

在您的 prepareCell:forIndexPath 中,您将两个子视图添加到最后一个单元格中。您可以按照您的描述使用 elseif,因此您的方法看起来像这样

if (indexPath.row == 0)  {
    [cell.contentView addSubview:titleField];   
} else if (indexPath.row == 1) { 
    [cell.contentView addSubview:authorField];
} else {
    [cell.contentView addSubview:atextField];
}

您可以在 if 之后添加任意数量的 else if。

于 2012-06-26T08:45:11.747 回答
1

做这个:

- (void)prepareCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0)  {
    [cell.contentView addSubview:titleField];   
} else if(indexPath.row == 1) { 
    [cell.contentView addSubview:authorField];
}else if(indexPath.row == 2) { 
    [cell.contentView addSubview:atextField];
}
}
于 2012-06-26T08:45:41.263 回答
1
if (indexPath.row == 0)  {
    [cell.contentView addSubview:titleField];   
} else if(indexPath.row == 1) { 
    [cell.contentView addSubview:authorField];
}else if(indexPath.row == 2) { 
    [cell.contentView addSubview:atextField];
}
于 2012-06-26T08:46:41.887 回答