簡體   English   中英

用我的自定義委托找不到協議聲明

[英]cannot find protocol declaration with my custom delegate

我設置的代表遇到一個奇怪的問題。 我得到的錯誤是“找不到'SearchViewDelegate的協議聲明”

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

- (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

#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

我以為我正確地聲明了委托人以及一切。

這是我要在searchView.m中調用委托方法的地方:

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

您應該在SearchView.h中具有委托協議聲明(假設您使用的是SearchViewDelegate)。 這是委托模式的標准方式。

如果錯誤是在SearchView.h中,我認為您需要添加

#import "TaskListViewController.h"

到標題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM