0

我正在做一个制作 1 BookStore 的练习。我的书店将显示书店数组中的所有图书对象。我的项目可以这样理解: MasterView:将显示书的所有标题。DetailView:每当用户在 MasterView 的书名簿上标签时,都会显示该书的详细信息。

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

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

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

谢谢你。

4

1 回答 1

0

Step1:新建一个文件,命名为"LKAddViewController"

第2步:LKAddViewController.h定义UITextFieldUIButtondelegate方法类似..

#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

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

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

Step5: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];
}

希望这对您有用并满足您的要求。

于 2013-05-06T10:05:44.397 回答