简体   繁体   English

用我的自定义委托找不到协议声明

[英]cannot find protocol declaration with my custom delegate

I am running into a weird problem with my delegate that I set up. 我设置的代表遇到一个奇怪的问题。 the error I get is "Cannot find protocol declaration for 'SearchViewDelegate' 我得到的错误是“找不到'SearchViewDelegate的协议声明”

ListViewController.h ListViewController.h

#import "SearchView.h"
@class SearchView;
@protocol SearchViewDelegate <NSObject>
@optional
- (void)didTapSearchButton:(SearchView *)searchView;
@end

@interface TaskListViewController : UIViewController <UITableViewDelegate,UITableViewDataSource, UITextFieldDelegate>{
    SearchView *searchView;
}

@property(nonatomic, assign) id<SearchViewDelegate> delegate;

ListViewController.m ListViewController.m

- (IBAction)didTapSearchButton
{
  NSString *searchTerm = searchView.searchField.text;

  if ([searchTerm isEqualToString:@""]) {
    [self.view endEditing:YES];
    return ;
  }

  [searchView resignFirstResponder];
  NSArray *results = [[CoreDataManager sharedInstance] fetchTaskByName:searchTerm];

  [tasks removeAllObjects];
  [tasks addObjectsFromArray:results];

  [self.view endEditing:YES];
  [taskTable reloadData];
}

SearchView.h SearchView.h

#import <UIKit/UIKit.h>

@interface SearchView : UIView <UITextFieldDelegate, UISearchBarDelegate, SearchViewDelegate> // <- where the protocol error occurrs
@property (nonatomic, strong) UITextField *searchField;
@property (nonatomic, strong) UIButton *searchButton;

@end

I thought I declared the delegate correctly and everything. 我以为我正确地声明了委托人以及一切。

Here is where I want to call the delegate method, in searchView.m: 这是我要在searchView.m中调用委托方法的地方:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
  [self.searchField.delegate  didTapSearchButton:self];
  [textField resignFirstResponder];
  return YES;
}

You should have delegate protocal declaration (I assume it's SearchViewDelegate in your case) in SearchView.h. 您应该在SearchView.h中具有委托协议声明(假设您使用的是SearchViewDelegate)。 That's standard way in delegate pattern. 这是委托模式的标准方式。

If the error is in SearchView.h, I think you need to add 如果错误是在SearchView.h中,我认为您需要添加

#import "TaskListViewController.h"

to the header. 到标题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM