主要实现协议传值内部的传值所用的控件不再详述
声明协议
SecondViewController.h
@protocol SecondViewController <NSObject>
-(void)changeValue:(NSString *)str;
@end
@interface SecondViewController : UIViewController
@property(nonatomic,copy)NSString *name;
@property(nonatomic,assign)id<SecondViewController>delegate;
@end
SecondViewController.m文件中的协议方法的定义
@interface SecondViewController ()
@property(nonatomic,retain)UILabel *lable;
@property(nonatomic,retain)UITextField *textField;
@property(nonatomic,retain)UIButton *button;
@end
@implementation SecondViewController
-(void)dealloc{
[_button release];
[_lable release];
[_textField release];
[_name release];
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.lable = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 150, 40)];
self.textField = [[UITextField alloc]initWithFrame:CGRectMake(100, 150, 200, 50)];
self.button = [UIButton buttonWithType:UIButtonTypeSystem];
[self.button setTitle:@"返回" forState:UIControlStateNormal];
[self.button addTarget:self action:@selector(click:) forControlEvents:UIControlEventTouchUpInside];
self.lable.text = self.name;
}
-(void)click:(UIButton *)button{
[self.delegate changeValue:self.textField.text];
[self.navigationController popViewControllerAnimated:YES];
}
签订协议完成传值
#import "SecondViewController.h"
@interface MainViewController ()<UITableViewDataSource,UITableViewDelegate,SecondViewController>
@property(nonatomic,retain)UITableView *tableView;
@property(nonatomic,retain)NSMutableArray *arr;
@property(nonatomic,retain)UIImageView *imageView;
@end
@implementation MainViewController
-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.arr = [NSMutableArray arrayWithObjects:@"宋江", @"卢俊义", @"吴用", @"公孙胜", @"关胜", @"林冲", @"秦明" ,@"呼延灼" , @"花荣",@"柴进", @"李应", @"朱仝",@"鲁智深",@"武松",nil];
}
return self;
}
-(void)dealloc{
[_tableView release];
[_arr release];
[_imageView release];
[super dealloc];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationController.navigationBar.translucent = NO;
self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 64) style:UITableViewStylePlain];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"123.png"]];
[self.tableView addSubview:self.imageView];
self.tableView.contentInset = UIEdgeInsetsMake(200, 0, 0, 0);
}
#pragma mark tableview的delegate已经签订好scrollView的协议,只要设置好代理人,就可以使用scrollView的协议方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat y = scrollView.contentOffset.y;
NSLog(@"%g",y);
if (y < 0) {
self.imageView.frame = CGRectMake(0, y, self.view.frame.size.width,-y);
}
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.arr.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *reuse = @"reuse";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuse];
if (!cell) {
cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuse]autorelease];
}
cell.textLabel.text = self.arr[indexPath.row];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%ld",indexPath.section];
NSString *picName = [NSString stringWithFormat:@"h%ld.jpeg",indexPath.row + 1];
cell.imageView.image = [UIImage imageNamed:picName];
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
SecondViewController *secVC = [[SecondViewController alloc]init];
[self.navigationController pushViewController:secVC animated:YES];
[secVC release];
secVC.name = self.arr[indexPath.row];
secVC.delegate = self;
}
-(void)changeValue:(NSString *)str{
if (![str isEqualToString: @""]) {
[self.arr addObject:str];
[self.tableView reloadData];
}
}