簡體   English   中英

具有文本快捷方式的自定義UIToolbar的行為與具有UIButtons和UITableViewControllers的鍵盤的行為完全不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM