web-dev-qa-db-ja.com

キャンセルボタンがUISearchBarに表示されない

UICollectionViewがあります。 UINavigationBarの検索ボタンをクリックすると、UISearchControllersearchbarUINavigationItemのタイトルビューとして追加されます。 iPhoneの場合は正常に動作しています。 iPadの場合、cancelボタンは表示されません。検索バーだけで幅全体が使用されます。

enter image description here

誰でもこれを手伝ってくれる?前もって感謝します。

20
Sheik_101

iOS7では、ナビゲーションバーに追加してもキャンセルボタンは表示されません。このように、検索バーを別のビューに配置できます。

UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *viewForSearchBar = [[UIView alloc]initWithFrame:searchBar.bounds];
[viewForSearchBar addSubview:searchBar];
self.navigationItem.titleView = viewForSearchBar;
18

同じ問題がありました。iPhoneでは検索キャンセルが適切に表示されましたが、iPadでは表示されませんでした。

UISearchBarを別のUIViewでラップするという回避策は、外観が異なり、回転時の幅が間違っていたため、うまく機能しませんでした。

私の解決策は単純なものです-キャンセルなしで検索を使用し、キャンセルをUIBarButtonItemとして追加します。

7
Tal Haham

これを試して。番組キャンセルボタンのチェックマークを追加します。

enter image description here

2
Kaey
Added rightBarButtonItem with selector will work fine for me. And adding searchBar inside view before setting to navigation title view was not showing properly.
Code:- 
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.dismissView))
func dismissView() {
        if self.controller?.navigationController?.popViewController(animated: true) == nil {
            self.controller?.dismiss(animated: true, completion: nil)
        }
    }
2
Sagar Daundkar

Apple documentation setShowsCancelButton のとおり

ShowCancelButtonパラメーターにYESを指定した場合でも、iPadで実行されているアプリのキャンセルボタンは表示されません。

代替案についてはわかりませんが、Appleが提供するものです。

enter image description here

スウィフトバージョン:-

@Nikita Khandelwalの方法を試しましたが、それでもipadのビューに適合しません。これはSwiftコードであり、修正された答えとして与えられました:-

let searchBar: UISearchBar = UISearchBar()
searchBar.showCancelButton = true
searchBar.placeholder = "Search Your Job Title"
searchBar.fitToSize()
searchBar.delegate = self //do not need if you delegate searchBar
let viewForSearchBar: UIView = UIView(frame: searchBar.bounds)
viewForSearchBar.addSubview(searchBar)
self.navigationItem.titleView = viewForSearchBar

*********しかし、キャンセルボタンを正しく設定してビューに合わせる別の方法があります:-

  1. 検索バーをナビゲーションバーのタイトルビューとして設定します。

    let searchBar: UISearchBar = UISearchBar()
    searchBar.showCancelButton = true
    searchBar.placeholder = "Search Your Job Title"
    searchBar.delegate = self //do not need if you delegate searchBar
    self.navigationItem.titleView = searchBar
    
  2. バーボタンをビューコントローラーの右側にドラッグアンドドロップして、「キャンセル」という名前を付けます。

  3. 次に、そのボタンをこの関数に接続します:-

    @IBAction func iPadCancelButton(sender: AnyObject) {
           UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
          self.dismissViewControllerAnimated(true, completion: nil)
    }
    
1

Xcode 11でビルドされたiOS 13の場合、検索コントローラーが表示されているかどうかに応じて、キャンセルボタンの表示値を手動で設定する必要があります

0
Nostradamus