質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

433閲覧

navigationvarにserchbarをおきたいができない。

Himukin

総合スコア0

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/11/08 10:27

編集2020/11/09 07:52
import UIKit import SwiftUI class ViewController: UIViewController , UITableViewDataSource, UITableViewDelegate{ @IBOutlet var table:UITableView! // section毎の画像配列 let imgArray: NSArray = [ "陽はまたのぼる","せい家", "つけ麺 陽","味噌ガッツ", "一蘭","img5", "img6","img7"] let label2Array: NSArray = [ "陽はまたのぼる","せい家", "つけ麺 陽","味噌ガッツ", "一蘭","8/23/17:21", "8/23/17:33","8/23/17:41"] override func viewDidLoad() { super.viewDidLoad() self.title = "rameninformation" } //Table Viewのセルの数を指定 func tableView(_ table: UITableView, numberOfRowsInSection section: Int) -> Int { return imgArray.count } //各セルの要素を設定する func tableView(_ table: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // tableCell の ID で UITableViewCell のインスタンスを生成 let cell = table.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) let img = UIImage(named: imgArray[indexPath.row] as! String) // Tag番号 1 で UIImageView インスタンスの生成 let imageView = cell.viewWithTag(1) as! UIImageView imageView.image = img // Tag番号 2 で UILabel インスタンスの生成 let label1 = cell.viewWithTag(2) as! UILabel label1.text = "No." + String(indexPath.row + 1) // Tag番号 3 で UILabel インスタンスの生成 let label2 = cell.viewWithTag(3) as! UILabel label2.text = String(describing: label2Array[indexPath.row]) return cell } // Cell の高さを120にする func tableView(_ table: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 120.0 } var selectedImage: UIImage? // Cell が選択された場合 func tableView(_ table: UITableView,didSelectRowAt indexPath: IndexPath) { // [indexPath.row] から画像名を探し、UImage を設定 selectedImage = UIImage(named: imgArray[indexPath.row] as! String) if selectedImage != nil { // SubViewController へ遷移するために Segue を呼び出す // performSegue(withIdentifier: "toSubViewController",sender: nil) let next = SubViewController() self.navigationController?.pushViewController(next, animated: true) } } // Segue 準備 // override func prepare(for segue: UIStoryboardSegue, sender: Any!) { // if (segue.identifier == "toSubViewController") { // print("segueのidentifier") // print(segue.identifier as Any) // print(segue.destination) // let subVC: SubViewController = (segue.destination as? SubViewController)! // // SubViewController のselectedImgに選択された画像を設定する // subVC.selectedImg = selectedImage // } // } } class addNavigationSearchBar: UIViewController,UISearchBarDelegate { //検索バーの宣言 var searchBar: UISearchBar! @IBOutlet weak var textLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() //NavigationBarに検索バーを設置 setSearchBar() } //検索バーの設置 func setSearchBar() { // NavigationBarにSearchBarをセット if let navigationBarFrame = self.navigationController?.navigationBar.bounds { //NavigationBarに適したサイズの検索バーを設置 let searchBar: UISearchBar = UISearchBar(frame: navigationBarFrame) //デリゲート searchBar.delegate = self //プレースホルダー searchBar.placeholder = "ユーザーを検索" //検索バーのスタイル searchBar.autocapitalizationType = UITextAutocapitalizationType.none //NavigationTitleが置かれる場所に検索バーを設置 navigationItem.titleView = searchBar //NavigationTitleのサイズを検索バーと同じにする navigationItem.titleView?.frame = searchBar.frame } } //検索バーで入力する時 func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { //キャンセルボタンを表示 searchBar.setShowsCancelButton(true, animated: true) return true } //検索バーのキャンセルがタップされた時 func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { //キャンセルボタンを非表示 searchBar.showsCancelButton = false //キーボードを閉じる searchBar.resignFirstResponder() } //検索バーでEnterが押された時 func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { //Labelに入力した値を設定 textLabel.text = searchBar.text! } }

この場合delegateもいじらないとだめでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TsukubaDepot

2020/11/09 00:59

コードの部分ですが、以前のご質問と同じように、```で囲むか、<code>タグで囲っていただけないでしょうか。 インデントなどが崩れて見にくい上、コピーして利用するのも大変ですので、よろしくお願いします。
TsukubaDepot

2020/11/09 01:02

ちなみに、addNavigationSearchBar が Navigation Bar が表示されないクラスでしょうか(ちなみに、クラス名は大文字で始めることが推奨されています)。 そうであれば、問題なく表示されますが、addNavigationSearchBar は Navigation Controller の管理下に入っているのでしょうか。 また、ご提示されているソースコードのViewControllerとaddNavigationSearchBarには関連性がない(ViewControllerから addNavigationSearchBar は呼ばれていない)のですが、実際はどのように利用されるご予定でしょうか。
Himukin

2020/11/09 07:31

Navigation Controllerの管理下に入れるためにはどうしたらいいのでしょうか? Navigation Controllerに関するコードを書いていないので追記の仕方がわかりません。 ViewControllerの画面のNavigationvarに検索バーを入れたいです。 ストーリーボードではできないとのことで、悩んでいます。
TsukubaDepot

2020/11/09 07:37

「StoryBoardではできない」というのは、どこかに書かれていたことなのでしょうか。 また、コードが正しく表示されていないようです。 以前投稿されたご質問を参考に、正しい表示方法をご確認いただけますでしょうか。
Himukin

2020/11/09 07:54

記事に書かれていました。 直しました。navigationcontroller自体に検索バーを入れることはできなくなってしまったのでしょうか?
TsukubaDepot

2020/11/09 11:24

「StoryBoardではできない」というのは、「NavigationBarにSearchBarを入れることができない」のか、それとも「任意の View ControllerをNavigation Controller の管理下に置くことができない」のどちらを指しているのでしょうか。 書かれていた記事の内容も参考にしたいので、記事のURLや書籍名を教えていただけないでしょうか。 ちなみに、私が試した方法は、StoryBoard 上で ViewController を NavigationController の管理下におき、コードから navigationItem.titleView = searchBar と設定するような方法です。 この方法であれば、問題なく NavigationController で管理された NavigationItem に SearchBar を入れることが可能です。
Himukin

2020/11/10 06:30

NavigationBarにSearchBarを入れることができないです。 実際にできませんでした。 試してみましたが、 unable to dequeue a cell with identifier tableCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard こちらのエラーが出ました。
TsukubaDepot

2020/11/10 08:37

NavigationBar に SearchBar を入れる、というのが今回実現されたいことかと思いますが、そこでなぜ tableView のエラーが出てくるのでしょうか。
Himukin

2020/11/12 08:01

わかりません・・・ <ちなみに、私が試した方法は、StoryBoard 上で ViewController を NavigationController の管理下におき、コードから navigationItem.titleView = searchBar と設定するような方法です。 この方法であれば、問題なく NavigationController で管理された NavigationItem に SearchBar を入れることが可能です。> ここの部分を説明している記事が出てこなくて色々試行錯誤していますが、結局上記のエラーにたどり着いてしまいます。
TsukubaDepot

2020/11/12 08:38

まず、 > unable to dequeue a cell with identifier tableCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard これは UITableView に関するエラーです。 まだ出ているようであれば、それを修正する方が先決かとおもいます。 let cell = table.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) という行がありますが、ここで利用している "tableCell" という名前のセルが準備されていないため出るエラーとなります。 コードでは登録していないので、StoryBoard で登録していないか、あるいは名前が違っているということはないでしょうか。
Himukin

2020/11/13 08:16

StoryBoardで登録はしていて、名前も間違っていないです。 色々試していたら、エラーは消えましたがボタンを押しても反応がない状態になってしまいました。 一度サーチバー関連のコードを消して一から書き直したいと思っているのですが、良い記事などがありましたら教えていただきたいです。お願い致します。
TsukubaDepot

2020/11/13 09:41

それは、どのUIに関しての記事でしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問