具有文本快捷键的自定义UIToolbar与UIButtons和UITableViewControllers的键盘完全不同作用
我相信这将是一种复杂的情况来描述。具有文本快捷键的自定义UIToolbar与UIButtons和UITableViewControllers的键盘完全不同作用
我有一个TableViewController
(Event Entry)
充当用户输入功能,当用户点击一个UITextField
,在顶部得到采取这种TableViewController
与UISearchBar
,他们可以从TableView
选择一个现有的名称,搜索在UITableView
中使用UISearchBar
作为名称,或者通过在UISearchBar
中输入不存在的条目的字母来创建名称。如果事件不存在,他们会在屏幕中间出现一个按钮,其中的文本标签是Create,随后是用户输入的名称。如果用户添加更多字母,则会附加到UIButton
的标题。
我有一个UIToolbar
,它位于键盘正上方,有5个按钮,分别命名为婚礼,生日,新年等。它可以帮助用户在添加新事件时不必输入那些常见词汇。
TableView中的数据填充了Core Data
以及先前输入的事件。
问题 我面临的情况是,UIToolbar按钮以不同的方式对键盘反应的事实。如果我从键盘输入“Wedding”,它会向我显示以Wedding开头的TableView结果,或者它会在屏幕中间显示一个“创建”按钮,以便能够创建该条目。如果我在UIToolbar上按婚礼,它不会过滤UITableView,并且不会提供“创建”该事件的功能,但它确实在顶部的UISearchBar上添加了“婚礼”一词。只有当我用键盘移除或添加一个字符时,才会注册到UITableView和Create按钮。
例如,我创建了一个名为“John's Wedding”的事件,但没有引号。我在UISearchBar
中输入了“John's”,并且出现了“Create”UIButton
(因为我没有“John's”作为条目),所以Create按钮的标题现在是“Create John's”。如果我在UIToolbar
上按婚宴的UIBarButtonItem
,它会附加到searchBar的末尾,但不会结束到创建按钮。
所以在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];
}
}
以下示范创建按钮的方法。 Create按钮是在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中选择婚礼,它不会筛选TableView。它也不会激活“创建”按钮。
我希望这是有道理的。我很抱歉,如果没有,我很乐意提供任何进一步的信息,但任何指导真的不胜感激。
情况已解决。
我从调用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];
}
}