我认为这将是一个复杂的情况。
我有TableViewController
(Event Entry)
作为用户的输入功能,用户点击UITextField
,TableViewController
带UISearchBar
1}}在顶部,他们可以从TableView
中选择现有名称,在UITableView
中使用UISearchBar
搜索名称,或者通过键入字母来创建名称UISearchBar
表示不存在的条目。如果事件不存在,则会在屏幕中间提示一个按钮,其中文本标签为Create,后跟用户输入的名称。如果用户添加更多字母,则会将其附加到UIButton
的标题中。
我有一个UIToolbar
位于键盘正上方,有5个按钮,分别是婚礼,生日,新年等。它可以帮助用户在添加新活动时不必输入这些常用词。
TableView中的数据填充了Core Data
,其中包含先前输入的事件。
问题 我面临的情况是UIToolbar按钮以不同的方式对键盘作出反应。如果我从键盘输入“Wedding”,它将显示TableView中以Wedding开头的结果,或者它会在屏幕中间显示一个“Create”按钮,以便能够创建该条目。如果我按下UIToolbar上的Wedding,它不会过滤UITableView并且不会为我提供“创建”该事件的能力,尽管它会在顶部的UISearchBar中附加单词“Wedding”。只有当我用键盘删除或添加一个字符时,它才会注册UITableView和Create按钮。
例如,我创建了一个名为“John's Wedding”的活动,没有引号。我在UISearchBar
中键入“John's”,然后出现“Create”UIButton
(因为我没有“John's”作为条目),所以Create按钮的标题现在是“Create John's” 。如果我在UIBarButtonItem
上按下UIToolbar
婚礼,则会将其附加到搜索栏的末尾,但不会附加到“创建”按钮的末尾。
所以在UISearchBar
,我现在有“约翰的婚礼”,但创建按钮标题有“创建约翰”。
如果我使用UISearchBar
中的退格键删除某个字符,则“创建”按钮会在结尾显示“婚礼”。
我错过了什么?它似乎是某种需要在某处发生的reloadData。
这是UIToolbar的创建:
-(void)configureKeyboardToolbars
{
UIToolbar *eventToolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f,
self.view.window.frame.size.width, 44.0f)];
self.selectedKeyboardTheme = [[NSUserDefaults standardUserDefaults] objectForKey:@"Keyboard"];
if ([self.selectedKeyboardTheme isEqualToString:@"Dark"])
{
eventToolBar.tintColor = [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f];
eventToolBar.barTintColor = [UIColor blackColor];
eventToolBar.translucent = YES;
}
else if ([self.selectedKeyboardTheme isEqualToString:@"Light"])
{
eventToolBar.tintColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:1.0f];
eventToolBar.barTintColor = [UIColor whiteColor];
eventToolBar.translucent = YES;
}
eventToolBar.items = @[ [[UIBarButtonItem alloc] initWithTitle:@"Wedding"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(barButtonAddText:)],
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil],
[[UIBarButtonItem alloc] initWithTitle:@"Birthday"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(barButtonAddText:)],
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil],
[[UIBarButtonItem alloc] initWithTitle:@"Anniversary"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(barButtonAddText:)],
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil],
[[UIBarButtonItem alloc] initWithTitle:@"New Year"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(barButtonAddText:)],
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil],];
// Assign the toolbar to the occasionTextField
self.eventAddSearchBar.inputAccessoryView = eventToolBar;
}
这是在敲击barbuttonitem时调用的方法:
-(IBAction)barButtonAddText:(UIBarButtonItem*)sender
{
if (self.eventAddSearchBar.isFirstResponder)
{
NSString *insertedText = self.eventAddSearchBar.text;
self.eventAddSearchBar.text = [insertedText stringByAppendingFormat:@"%@", sender.title];
[self.eventAddSearchTableView reloadData];
}
}
这是显示“创建”按钮的方法。 “创建”按钮在viewDidLoad中创建。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
self.eventAddSearchBar.showsCancelButton = YES;
_autocompleteFetchedResultsController = nil;
NSError *error;
if (![[self autocompleteFetchedResultsController] performFetch:&error])
{
// Handle Error
}
else
{
[self.eventAddSearchTableView reloadData];
[self.createButton setHidden:_autocompleteFetchedResultsController.fetchedObjects.count > 0];
[self.createButton setTitle:[NSString stringWithFormat:@"Create %@", self.eventAddSearchBar.text] forState:UIControlStateNormal];
if (![self.eventAddSearchBar isFirstResponder])
{
self.shouldBeginEditing = NO;
[self.eventAddSearchTableView reloadData];
[self.eventAddSearchBar resignFirstResponder];
}
}
}
所以问题是,UIToolbar BarButtonItems对UITableView的任何影响都没有任何影响。如果我输入婚礼,它会过滤以婚礼开头的结果。如果我从UIToolbar中选择Wedding,它不会过滤TableView。它也不会激活“创建”按钮。
我希望这是有道理的。我很抱歉,如果没有,我很乐意提供任何进一步的信息,但任何有关这方面的指导将非常感激。
答案 0 :(得分:0)
情况得到解决。
我从点击UIBarButtonItem时调用的方法调用了[self searchBar:self.eventAddSearchBar textDidChange:self.eventAddSearchBar.text];
。
-(IBAction)barButtonAddText:(UIBarButtonItem*)sender
{
if (self.eventAddSearchBar.isFirstResponder)
{
NSString *insertedText = self.eventAddSearchBar.text;
self.eventAddSearchBar.text = [insertedText stringByAppendingFormat:@"%@", sender.title];
[self searchBar:self.eventAddSearchBar textDidChange:self.eventAddSearchBar.text];
}
}