Ios 带有文本快捷键的自定义UIToolbar与带有UIButtons和UITableViewController的键盘的作用完全不同
我认为这将是一个复杂的情况 我有一个Ios 带有文本快捷键的自定义UIToolbar与带有UIButtons和UITableViewController的键盘的作用完全不同,ios,iphone,uibutton,uisearchbar,uitoolbar,Ios,Iphone,Uibutton,Uisearchbar,Uitoolbar,我认为这将是一个复杂的情况 我有一个TableViewController(事件条目)作为用户的输入功能,用户可以点击UITextField,通过顶部的UISearchBar进入这个TableViewController,他们可以从TableView中选择现有名称,使用UISearchBar在UITableView中搜索名称,或通过在UISearchBar中键入不存在的条目的字母来创建名称。如果事件不存在,它们将在屏幕中部被提示,其中创建文本标签的按钮后面跟着用户输入的名称。如果用户添加更多字母
TableViewController
(事件条目)
作为用户的输入功能,用户可以点击UITextField
,通过顶部的UISearchBar
进入这个TableViewController
,他们可以从TableView
中选择现有名称,使用UISearchBar
在UITableView
中搜索名称,或通过在UISearchBar
中键入不存在的条目的字母来创建名称。如果事件不存在,它们将在屏幕中部被提示,其中创建文本标签的按钮后面跟着用户输入的名称。如果用户添加更多字母,则会将其附加到ui按钮的标题中
我有一个UIToolbar
,它位于键盘正上方,有5个按钮,分别名为婚礼、生日、新年等。它可以帮助用户在添加新事件时不必键入这些常用词
TableView中的数据由以前输入的事件填充核心数据
问题
我面临的情况是,UIToolbar按钮对键盘的反应方式不同。如果我在键盘上键入“婚礼”,它将显示我从婚礼开始的TabLVIEW中的结果,或者它将显示我在屏幕中间的“创建”按钮来创建该条目。如果我在UIToolbar上按“婚礼”,它不会过滤UITableView,也不会为我提供“创建”该事件的功能,尽管它会在顶部的UISearchBar中添加“婚礼”一词。只有当我用键盘删除或添加一个字符时,它才会注册到UITableView和Create按钮
例如,我正在创建一个名为“约翰的婚礼”的活动,没有引用。我在ui搜索栏
中键入“John's”,此时会显示“Create”ui按钮
(因为我没有“John's”作为条目),因此Create按钮的标题现在是“Create John's”。如果我在UIToolbar
上为婚礼按UIBarButtonItem
,它会附加到搜索栏的末尾,但不会附加到创建按钮的末尾
因此,在ui搜索栏中,我现在有了“约翰的婚礼”,但创建按钮标题有“创建约翰的婚礼”
如果我从UISearchBar
中删除带有退格键的字符,则“创建”按钮会在其末尾显示“婚礼”
我错过了什么?这似乎是某种需要在某处重新加载的数据
以下是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 BarButtonims对与UITableView相关的任何内容都没有任何影响。如果我输入婚礼,它会过滤以婚礼开始的结果。如果我从UIToolbar中选择“婚礼”,它不会过滤TableView。它也不会激活“创建”按钮
我希望这是有道理的。如果没有,我很抱歉,我很乐意提供进一步的信息,但如果有任何关于这方面的指导,我将不胜感激 情况得到解决
我调用了[self-searchBar:self.eventAddSearchBar textDidChange:self.eventAddSearchBar.text]当点击uiBarButtonim时调用的方法的代码>
-(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];
}
}