1

設定したデリゲートで奇妙な問題が発生しています。表示されるエラーは、「'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;
}
4

2 に答える 2

1

SearchView.hにデリゲートプロトコル宣言が必要です(あなたの場合はSearchViewDelegateだと思います)。これはデリゲート パターンの標準的な方法です。

于 2013-10-18T18:09:27.880 に答える
0

エラーが SearchView.h にある場合は、追加する必要があると思います

#import "TaskListViewController.h"

ヘッダーに。

于 2013-10-18T17:58:19.833 に答える