我只是想了解委托是如何运作的,我遇到了麻烦。
我有两个类(两个UIViewController)连接到storyboard,第一个(ViewController.h / m)持有一个带有单元格的TableView,第二个(AddNameViewController.h / m)只是持有一个TextField(我想要的地方)写)和一个按钮(添加名称)
你肯定明白我希望按下按钮向TableView发送写入TextField的内容,非常简单。
由于我有两个不同的控制器和一个包含tableview数据的数组,我想用委托连接它们(只是为了学习它)。
这里有一些代码:
ViewController.h
#import "AddNameViewController.h"
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, AddNameViewControllerDelegate>
@property (strong, nonatomic) NSMutableArray *array;
@end
ViewController.m
#import "ViewController.h"
#import "AddNameViewController.h"
@inferface ViewController ()
@end
@implementation ViewController
@synthesize array;
-(void)addStringWithString:(NSString*)string
{
[self.array addObject:string];
NSLog(@"%@", array);
}
-(void)viewDidLoad
{
AddNameViewController *anvc = [[AddNameViewController alloc] init];
anvc.delegate = self;
array = [[NSMutableArray alloc] initWithObjects:@"first", @"second", nil];
NSLog(@"%@", array);
[super viewDidLoad];
}
-(NSInteger)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSindexPath*)indexPath
{
static NSString *simpleTableIdentifier = @"RecipeCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
cell.textLabel.text = [array objectAtIndex:indexPath.row];
return cell;
}
@end
AddNameViewController.h
@protocol AddNameViewControllerDelegate <NSObject>
-(void)addStringWithString:(NSString*)string;
@end
@interface AddNameViewController : UIViewController
@property (weak, nonatomic) id <AddNameViewControllerDelegate> delegate;
@property (weak, nonatomic) IBOutlet UITextField *myTextField;
-(IBAction)add:(id)sender;
@end
最后是AddNameViewController.m
#import "ViewController.h"
@interface AddNameViewController ()
@end
@implementation AddNameViewController
@synthesize myTextField, delegate;
-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
-(void)viewDidLoad
{
[super viewDidLoad];
}
-(IBAction)add:(id)sender
{
[self.delegate addStringWithString:self.myTextField.text];
// I've also tried with this but nothing --> [self.delegate addStringWithString:@"aa"];
}
@end
数组已正确初始化,没有错误,没有警告,没有崩溃,似乎甚至没有调用“addStringWithString”方法,因为甚至不是NSLog的任何东西。
显然,故事板,方法和插座中的所有内容都有关联,感谢您的帮助。
答案 0 :(得分:0)
也试试这个
-(IBAction)add:(id)sender
{
if([self.delegate respondsToSelector:@selector(addStringWithString:)]) {
[self.delegate addStringWithString:self.myTextField.text];
}
// I've also tried with this but nothing --> [self.delegate addStringWithString:@"aa"];
}