Objective c 在一个可编辑单元格中写入两个内容
我有3个表格单元格,它以某种方式显示了最后一个单元格中的最后两个内容。我在代码中的某个地方做了一些错误,但我不知道在哪里,因为我只是按照一个教程,并尝试像在教程中那样做,但是我想要3个可编辑的单元格,而不是2个单元格 完整代码:Objective c 在一个可编辑单元格中写入两个内容,objective-c,ios,xcode,xcode4,Objective C,Ios,Xcode,Xcode4,我有3个表格单元格,它以某种方式显示了最后一个单元格中的最后两个内容。我在代码中的某个地方做了一些错误,但我不知道在哪里,因为我只是按照一个教程,并尝试像在教程中那样做,但是我想要3个可编辑的单元格,而不是2个单元格 完整代码: #import "LocationAddViewController.h" #import "Location.h" @interface LocationAddViewController () - (void)prepareCell:(UITableViewCe
#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(…)
)有人比我更了解它吗?关于错误的来源,你是对的。您正在相同的坐标处添加authorField
&atextField
。如果s,包含3个原因的正确方法是:
if (/* condition 1 */) {
}
else if ( /* condition 2 */) {
}
else if ( /* condition 3 */) {
}
关于错误的来源,你是对的。您正在相同的坐标处添加
authorField
&atextField
。如果s,包含3个原因的正确方法是:
if (/* condition 1 */) {
}
else if ( /* condition 2 */) {
}
else if ( /* condition 3 */) {
}
在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。在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。执行以下操作:
- (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];
}
}
这样做:
- (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];
}
}
啊,是的!我总是用Ruby语法的思维方式(elsif)。。。这就是为什么没有成功。啊,是的!我总是用Ruby语法的思维方式(elsif)。。。这就是为什么没有成功的原因。谢谢你的快速回答。我试着用
elsif
(Ruby语法)做同样的事情,我想知道为什么没有成功。还忘记了indexPath.row
-thing。感谢所有快速回答。我试着用elsif
(Ruby语法)做同样的事情,我想知道为什么没有成功。还忘记了indexPath.row
-东西。