![](/img/trans.png)
[英]Add custom image UIButtons to a custom UIToolbar does not work right
[英]A custom UIToolbar with text shortcuts acts completely differently from the Keyboard with UIButtons and UITableViewControllers
我相信我會描述一個復雜的情況。
我有一個TableViewController
(Event Entry)
,它充當用戶的輸入功能,用戶單擊UITextField
,進入帶有頂部UISearchBar
TableViewController
,他們可以從TableView
選擇現有名稱,搜索在UITableView
使用UISearchBar
命名,或者通過在UISearchBar
輸入字母為不存在的條目創建名稱。 如果事件不存在,則會在屏幕中間用一個按鈕提示您,該按鈕的文本標簽為“創建”,后跟用戶輸入的名稱。 如果用戶添加更多字母,它將添加到UIButton
的標題之后。
我有一個UIToolbar
,它位於鍵盤上方,帶有5個按鈕,分別是“婚禮”,“生日”,“新年”等。它可以幫助用戶在添加新事件時不必鍵入這些常用詞。
TableView中的數據將由Core Data
填充,其中包含先前輸入的事件。
問題我面臨的情況是UIToolbar Button的反應方式與鍵盤不同。 如果我從鍵盤輸入“婚禮”,它將在“婚禮”開頭的TableView中向我顯示結果,或者在屏幕中間顯示一個“創建”按鈕以創建該條目。 如果我按UIToolbar上的Wedding,它不會過濾UITableView,也不能為我提供“創建”該事件的功能,盡管它確實在頂部的UISearchBar上附加了“ Wedding”一詞。 只有在我使用鍵盤刪除或添加字符后,才使用UITableView和“創建”按鈕進行注冊。
例如,我正在創建一個不帶引號的事件“ John's Wedding”。 我在UISearchBar
輸入“ John's”,然后顯示“ Create” UIButton
(因為我沒有“ John's”作為條目),因此“創建”按鈕的標題現在為“ Create John's”。 如果我按UIToolbar
上用於Wedding的UIBarButtonItem
,它將被附加到searchBar的末尾,而不是附加到Create按鈕的末尾。
因此,在UISearchBar
,我現在有“ John's Wedding”,但創建按鈕標題具有“ Create John's”。
如果我從UISearchBar
使用退格鍵刪除了一個字符,則“創建”按鈕將在其末尾顯示Wedding。
我想念什么? 似乎是某種需要在某處發生的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。 它還不會激活“創建”按鈕。
我希望這是有道理的。 很抱歉,如果沒有,我們將很高興為您提供任何進一步的信息,但是對此的任何指導將不勝感激。
情況解決了。
我叫[self searchBar:self.eventAddSearchBar textDidChange:self.eventAddSearchBar.text];
從點按UIBarButtonItem時調用的方法中。
-(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];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.