我正在做一个制作1个BookStore的练习。 我的书店将在书店阵列中显示所有书籍对象。 我的项目可以像这样理解: MasterView:将显示该书的所有标题。 DetailView:将在MasterView的标题簿上的用户选项卡上显示该书的详细信息。
我的问题:我想通过点击“添加”按钮在MasterView上再添一本书。 添加后,它应该返回到MasterView并再次显示商店中所有书籍的标题(包括我添加的新书)。
我知道我需要创建一个新的子视图,用户可以输入新书并需要使用委托来完成。但我是编码和Xcode的新手,我已经阅读了一些使用委托示例,但仍然无法应用于UITableView。
这是我的项目,我希望你们能帮助我理解并完成这项工作。 http://wikisend.com/download/720454/SuperBookStore2.zip
谢谢。
答案 0 :(得分:0)
第1步:制作名为"LKAddViewController"
第2步:在LKAddViewController.h
中定义UITextField
和UIButton
以及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];
}
希望这适合您并满足您的要求。