Ich habe einen sehr einfachen RootView Controller -> Detailansicht Controller, um eine Liste der Kerndatenobjekt anzuzeigen und Details zu einem ausgewählten Objekt in der DetailViewController anzuzeigen. Der DetailViewController ist ein UITableView mit benutzerdefiniertem UITableViewCell, das über ein UITextField verfügt, um Benutzeränderungen zu ermöglichen. Ich kann die Tabelle anzeigen, bearbeiten das Textfeld und so weiter. Ich bin mir jedoch nicht sicher, wie ich das Verwaltungsobjekt tatsächlich aktualisieren soll, wenn der Benutzer die Schaltfläche "Fertig" ausgewählt hat, oder die Änderungen bei der Aktion "Abbrechen" abbrechen. Ich verstehe, dass ich das wahrscheinlich erreichen kann, indem ich einen EditViewController benutze, der benutzt werden kann, um eine Eigenschaft gleichzeitig zu bearbeiten. Aber ich bin an einer Lösung interessiert, mit der ich die Inline-Bearbeitung im DetailViewController unterstützen kann. Irgendwelche Vorschläge wären sehr hilfreich.Edit NSManagedObject in einem UITextField in einem UITableViewCell
Danke,
Benutzerdefinierte UITableView Zelle Code
- (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];
}
Danke für Ihren Vorschlag. Momentan verwende ich den ViewController-Befehl editButton, um den Bearbeitungsstatus zu aktivieren. In diesem Fall habe ich keinen Aktionshandler für "Fertig". Also plane ich zu überprüfen, ob mein managedObject irgendwelche Änderungen hat, und rufe das Speichern in setEditing: animated method auf. Ist das der richtige Ansatz? – user320587
Auf diese Weise haben Sie ohnehin die Möglichkeit, abzubrechen. Mach einfach einen Speichervorgang. – Mundi