非常に単純なRootView Controller - > Detail View Controllerを使用して、コアデータオブジェクトのリストを表示し、DetailViewControllerの選択したオブジェクトの詳細を表示します。 DetailViewControllerは、ユーザーの編集を許可するUITextFieldを持つカスタムUITableViewCellを持つUITableViewです。 私はテーブルを表示することができ、テキストフィールドを編集することができます。しかし、ユーザーが「完了」ボタンを選択したり、「キャンセル」ボタン操作で変更を取り消したりすると、管理オブジェクトを実際に更新する方法がわかりません。 私はおそらくEditViewControllerを使ってこれを達成できます。これは、一度に1つのプロパティを編集するために使用できます。しかし、私はDetailViewControllerでインライン編集をサポートできるソリューションに興味があります。どんな提案も非常に役に立ちます。UITableViewCell内のUITextFieldでNSManagedObjectを編集します。
おかげで、
カスタムのUITableViewのセルコード
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.selectionStyle = UITableViewCellSelectionStyleNone;
_textField = [[UITextField alloc] initWithFrame:CGRectZero];
[_textField setTextAlignment:UITextAlignmentLeft];
[_textField setReturnKeyType:UIReturnKeyDone];
[_textField setClearButtonMode:UITextFieldViewModeWhileEditing];
[_textField setDelegate:self];
[[self contentView] addSubview:_textField];
}
return self;
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
-(void) layoutSubviews {
[super layoutSubviews];
CGRect contentRect = [self.contentView bounds];
// In this example we will never be editing, but this illustrates the appropriate pattern
if ([self isEditing]) {
self.textLabel.frame = CGRectZero;
self.textField.frame = CGRectMake(contentRect.origin.x + kCellLeftOffset, kCellTopOffset, contentRect.size.width - kCellLeftOffset, kCellHeight);
}
else {
CGRect frame = CGRectMake(contentRect.origin.x + kCellLeftOffset, kCellTopOffset, 90, kCellHeight);
CGRect textFrame = CGRectMake(frame.origin.x + frame.size.width + kCellLeftOffset, kCellTopOffset, 180, kCellHeight);
self.textLabel.frame = frame;
self.textField.frame = textFrame;
}
}
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
if (!editing)
[_textField resignFirstResponder];
}
-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField {
return [self isEditing];
}
あなたの提案をありがとう。現在、私はEditController editButton項目を使用して編集状態を有効にしています。この場合、「完了」のアクションハンドラはありません。ですから、私は自分のmanagedObjectが何らかの変更をしているかどうかをチェックし、setEditing:animatedメソッドでsaveを呼び出すことを計画しています。これは正しいアプローチですか? – user320587
この方法では、とにかくキャンセルする可能性があります。ちょうど保存してください。 – Mundi