首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加ViewController与编辑ViewController

添加ViewController与编辑ViewController
EN

Stack Overflow用户
提问于 2012-08-12 07:02:09
回答 3查看 734关注 0票数 4

我正在尝试决定一种设计模式。我有一个应用程序,用户添加一个条目到核心数据数据库。他们还应该能够在以后编辑该条目。这两个视图基本上显示相同的数据,只有一个视图用于编辑已添加的内容。

我不确定我是否应该有两个非常相似的独立视图控制器,或者我是否应该使用某种继承来设置它,或者是否有一些我没有考虑到的其他想法。

我很感谢你的意见。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-12 08:51:36

我遇到了一个类似的问题来解决,并最终使用相同的UIViewController来做这两个操作。这两种用例基本上是相同的:用户输入信息,然后保存。数据的验证是相同的,保存是相同的,表示是相同的。它们只是根据模型对象是否已经存在而有所不同。考虑以下示例:

.h文件:

代码语言:javascript
复制
@interface WHItemViewController : UITableViewController

//  This is the only attribute we really need to expose in our header
//  so that the presenting view controller can set the model object when editing
@property (nontatomic, retain) WHItem* item;

@end

.m文件:

代码语言:javascript
复制
@interface WHItemViewController()

// Other 'private' properties and methods

- (void)didSelectSaveButton:(id)sender;

@end

@implementation WHItemViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    if (self.item) { // setup the UI with the model object, if present.
        self.fooText.text = self.item.foo;
        self.barText.text = self.item.bar;
        self.bazText.text = self.item.baz;
    }
}

- (void)didSelectSaveButton:(id)sender {
    if (!self.item) {
        WHItem* item = nil;

        //  create a new instance from your managed object context 
        //  and set it to the item property

        self.item = item;
    }

    self.item.foo = self.fooText.text;
    self.item.bar = self.barText.text;
    self.item.baz = self.bazText.text

    NSError* error = nil;
    [WHDataAccess sharedInstance].managedObjectContext save:&error];

    // Error handling, etc.
}

//  Other methods

@end

此视图控制器的唯一用途是创建用于编辑和保存模型对象数据的表示。

票数 3
EN

Stack Overflow用户

发布于 2012-08-12 08:13:28

我在同样的情况下,我使用一个视图控制器来处理这两个问题。如果我传递一个实体,它将编辑该实体。如果我不这样做,它就是一个新的实体。在viewDidLoad中,我检查是否设置了实体,如果没有,就创建一个。然后,我继续填充文本字段和其他信息。如果它是一个新实体,属性将为空或具有默认值,我的视图控制器中的视图也是如此。当用户准备好时,我不必检查是更新还是插入,因为实体已经在开头插入了。

票数 2
EN

Stack Overflow用户

发布于 2012-08-12 07:41:30

我使用的模式如下:

代码语言:javascript
复制
#import "ItemViewController.h"

@protocol AddItemViewControllerDelegate;

@interface AddItemViewController : ItemViewController
{
    id <AddItemViewControllerDelegate> delegate;
}
@property (nonatomic, assign) id <AddItemViewControllerDelegate> delegate;

-(IBAction)cancel:(id)sender;
-(IBAction)save:(id)sender;
@end

@protocol AddItemViewControllerDelegate
    - (void)addItemViewController:(AddItemViewController *)controller didFinishWithSave:   (BOOL)save;
@end

AddItemController只是我用来编辑和显示现有对象的ItemViewController的子类化。

然后在实现中,我这样做:

代码语言:javascript
复制
#import "AddItemViewController.h"

@implementation AddItemViewController
@synthesize delegate;

-(void)viewDidLoad
{
    [super viewDidLoad];
    ...
    // Set up the undo manager and set editing state to YES.
    [self setUpUndoManager];
    self.editing = YES;
}

-(void)viewDidUnload
{
    [self cleanUpUndoManager];
    [super viewDidUnload];  
}

-(IBAction)cancel:(id)sender
{
    [delegate addItemViewController:self didFinishWithSave:NO];
}

-(IBAction)save:(id)sender
{
    [delegate addItemViewController:self didFinishWithSave:YES];
}

// ... other stuff.

@end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11918346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档