在一个可编辑单元格中写入两个内容

时间:2012-06-26 08:41:16

标签: objective-c ios xcode xcode4

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

enter image description here

完整代码:

#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 个答案:

答案 0 :(得分:1)

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

if (/* condition 1 */) {

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

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

}

答案 1 :(得分: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。

之后添加任意数量的其他ifs

答案 2 :(得分: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];
}
}

答案 3 :(得分: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];
}