0

アプリ用のカスタム検索バーを作成しました。クラスは次のとおりです: .h

@interface SearchView : UIView <UITextFieldDelegate, UISearchBarDelegate>
@property (nonatomic, strong) UITextField *searchField;
@property (nonatomic, strong) UIButton *searchButton;
@end

.m

@implementation SearchView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

      CGRect frame = CGRectMake(0, 0, 35, 35);

      [self.searchButton sizeToFit];
      self.alpha = 0.6;
      self.backgroundColor = [UIColor colorWithRed:206/255.0 green:206/255.0 blue:206/255.0 alpha:.8];
      self.searchButton = [UIButton buttonWithType:UIButtonTypeCustom];
      //[self.searchButton addTarget:self action:@selector(performSearchQuery) forControlEvents:UIControlEventTouchUpInside];
      [self.searchButton setImage:[UIImage imageNamed:@"SearchIcon2"] forState:UIControlStateNormal];
      //[self.searchButton sizeToFit];
      //self.searchButton.bounds.size.height = ;
      self.searchButton.frame = frame;
     // self.searchButton.right = frame.size.width - kPadding;
      [self addSubview:self.searchButton];

      self.searchField = [[UITextField alloc] initWithFrame:CGRectMake(43, -5, 270, 50)];
      //self.searchField.placeholder = [@"Search..." uppercaseString];
      self.searchField.delegate = self;
      self.searchField.autocorrectionType = UITextAutocorrectionTypeNo;
      self.searchField.autocapitalizationType = UITextAutocapitalizationTypeWords;
      self.searchField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
      self.searchField.returnKeyType = UIReturnKeySearch;
      self.searchField.clearsOnBeginEditing = YES;
      self.searchField.clearButtonMode = UITextFieldViewModeWhileEditing;
      [self addSubview:self.searchField];

    }
    return self;
}

searchBarSearchButtonClicked:デリゲート メソッドの機能を取得しようとしています。

そのためのコードは次のとおりです (taskListViewController):

.h

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

.m

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
  searchBar = (UISearchBar *)searchView;

  [self didTapSearchButton];
}

- (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 クラスと TaskListViewController の両方に uisearchBarDelegate を設定しました。uisearchBar の代わりに uiview をサブクラス化しているため、呼び出されないのはなぜですか? さらにコードや詳細が必要な場合は、お知らせください。ありがとう!

4

1 に答える 1

1

カスタム検索ビューを作成したので、既存の UISearchBar を使用する代わりに、デリゲートの独自の検索メソッドをクラスに実装して、コードを区別して読みやすくすることをお勧めします。

SearchViewクラスのデリゲートを作成する必要があります

ここでは、独自の 1 つを作成する方法を参照できます iOS アプリでカスタム デリゲートを作成する方法

作成後TaskListViewController、そのデリゲートに準拠することができ、searchButton がタップされたときに searchview 内でメソッドを呼び出して、TaskListViewController がそれを受け取ることができます。

于 2013-10-18T16:38:06.450 に答える