如何使用委托将新对象添加到Array并在TableView中显示它

时间:2013-05-05 07:44:12

标签: uitableview delegates

我正在做一个制作1个BookStore的练习。 我的书店将在书店阵列中显示所有书籍对象。 我的项目可以像这样理解: MasterView:将显示该书的所有标题。 DetailView:将在MasterView的标题簿上的用户选项卡上显示该书的详细信息。

我的问题:我想通过点击“添加”按钮在MasterView上再添一本书。 添加后,它应该返回到MasterView并再次显示商店中所有书籍的标题(包括我添加的新书)。

我知道我需要创建一个新的子视图,用户可以输入新书并需要使用委托来完成。但我是编码和Xcode的新手,我已经阅读了一些使用委托示例,但仍然无法应用于UITableView。

这是我的项目,我希望你们能帮助我理解并完成这项工作。 http://wikisend.com/download/720454/SuperBookStore2.zip

谢谢。

1 个答案:

答案 0 :(得分:0)

第1步:制作名为"LKAddViewController"

的新文件

第2步:LKAddViewController.h中定义UITextFieldUIButton以及delegate方法。

#import <UIKit/UIKit.h>
#import "LKBook.h"
@protocol LKAddViewControllerDelegate;
@interface LKAddViewController : UIViewController

@property (nonatomic,strong)IBOutlet UITextField *txtField;
@property (nonatomic) id <LKAddViewControllerDelegate> AddBookDelegate;
@property (strong, nonatomic) IBOutlet UITextField *author;
@property (strong, nonatomic) IBOutlet UITextField *titletxt;
@property (nonatomic,strong)IBOutlet UIButton *submit;
-(IBAction)btnSubmit:(id)sender;
@end



@protocol LKAddViewControllerDelegate <NSObject>

- (void)AddBook:(LKBook *)newObj;

@end

Step3:LKAddViewController.m中编写提交按钮的代码并调用委托方法,如..

@implementation LKAddViewController
@synthesize AddBookDelegate;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}
-(IBAction)btnSubmit:(id)sender{
    LKBook *newBook = [[LKBook alloc] init];
    newBook.author = self.author.text;
    newBook.title = self.titletxt.text;
    newBook.desc = self.titletxt.text;
    if ([self.AddBookDelegate respondsToSelector:@selector(AddBook:)]) {
        [self.AddBookDelegate AddBook:newBook];
    }
    [self.navigationController popViewControllerAnimated:YES];
}
@end

步骤:4 LKMasterViewController.h导入头文件并定义委托方法,如..

#import "LKAddViewController.h"
@interface LKMasterViewController () <LKAddViewControllerDelegate>{

第5步:用以下代码替换insertNewObject方法

- (void)insertNewObject:(id)sender
{
    LKAddViewController *obj = [[LKAddViewController alloc]initWithNibName:@"LKAddViewController" bundle:nil];
    obj.AddBookDelegate=self;
    [self.navigationController pushViewController:obj animated:YES];
//    if (!_objects) {
//        _objects = [[NSMutableArray alloc] init];
//    }
//    [_objects insertObject:[NSDate date] atIndex:0];
//    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
//    [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

}

step6:编写以下方法添加新对象并重新加载表。

- (void)AddBook:(LKBook *)newObj{
    [myBookStore.BookStore addObject:newObj];
    [self.tableView reloadData];
}

希望这适合您并满足您的要求。