iOS设置的代理没有被调用

SearchViewController.h

#import
#import "search.h"

@interface SearchViewController : UIViewController

@property (nonatomic,strong) id delegate;

@end

SeachViewController.m

  • (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
    {
    if (_searchBar.text.length == 0) {
    [self setSearchControllerHidden:YES];
    }
    else
    {
    _searchController.searchText = _searchBar.text;
    //发送消息
    if ([self.delegate respondsToSelector:@selector(searchTextChange)]) {
    [self.delegate searchTextChange];
    }

    [self setSearchControllerHidden:NO];
    

    }
    }

SearchResultController.m

  • (void)viewDidLoad {
    [super viewDidLoad];

    SearchViewController *searchViewVC = [[SearchViewController alloc]init];

    searchViewVC.delegate = self;

    self.resultList = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4", nil];
    }

  • (void)searchTextChange
    {
    NSLog(@"%@",self.searchText);
    }

你要设置self.delegate=searchbar的协议啊

delegate没类型,也没有@protocol声明协议吧,而且也没声明delegate对象。你找个delegate的demo看一下吧

不多说了,给你补充下代码

SearchViewController.h
#import
#import "search.h"

**@protocol SearchViewControllerDelegate

  • (void)searchTextChange; @end** @interface SearchViewController : UIViewController @property (nonatomic,assign) iddelegate; @end

然后在
SearchResultController.h 头文件里遵守这个协议
@interface SearchResultController : UIViewController

@property (nonatomic,assign) id delegate;//代理一般这个设置

在新建控制器的时候searchViewVC.delegate = self; 代表 self 这个控制器遵循了SearchViewControllerDelegate

使用代理注意,一般代理有weak或者assign。
自己写好协议@protocol xxxx
SearchViewController.h里对代理声明时最好@property (nonatomic,assign) i<协议>d delegate;
使用的时候:SearchResultController类要实现代理,除了searchViewVC.delegate = self;还要在@interface SearchResultControlle<代理协议>,
最后是使用代理方法