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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

238閲覧

自作のサイドメニュー作り

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2018/06/25 06:03

swift

1import UIKit 2import RealmSwift 3 4extension UIColor { 5 class func rgb(r: Int, g: Int, b: Int, alpha: CGFloat) -> UIColor{ 6 return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: alpha) 7 } 8} 9 10class TopViewViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { 11 12 13 @IBOutlet weak var TopViewTabelView: UITableView! 14 15 var isSlidemenuHidden = true 16 17 @IBOutlet weak var sidemenuconstant: UIView! 18 @IBOutlet weak var sideMLabel: UILabel! 19 @IBOutlet weak var sideTableView: UITableView! 20 21 let side = ["No.1","No2","No3"] 22 23 let ToDo = TopTodo() 24 var todoItem:Results<TopTodo>! 25 26 27 28 override func viewDidLoad() { 29 super.viewDidLoad() 30 31 sidemenuconstant.isHidden = true 32 33 34 navigationItem.title = "履歴" 35 // 永続化されているデータを取りだす 36 let realm = try! Realm() 37 self.todoItem = realm.objects(TopTodo.self) 38 self.TopViewTabelView.reloadData() 39 40 41 //navigationController?.navigationBar.prefersLargeTitles = true //これがやりたかった設定やメモ帳のナビゲーションの可変のやつ 42 navigationItem.title = "データベース" 43 TopViewTabelView.tableFooterView = UIView(frame: .zero) 44 self.view.backgroundColor = UIColor.rgb(r: 250, g: 204, b: 125, alpha: 1) 45 TopViewTabelView.frame = CGRect(x: 0, y: 64, width: 375, height: 667) 46 47 } 48 49 50 51 52 @IBAction func addBtr(_ sender: Any) { 53 let alert = UIAlertController(title: "タイトル", message: "メッセージ", preferredStyle: .alert) 54 55 // OKボタンの設定 56 let okAction = UIAlertAction(title: "OK", style: .default, handler: { 57 (action:UIAlertAction!) -> Void in 58 59 // OKを押した時入力されていたテキストを表示 60 if let textFields = alert.textFields { 61 62 // アラートに含まれるすべてのテキストフィールドを調べる 63 for textField in textFields { 64 //self.item.insert(textField.text!, at: 0) 65 66 let newTodo = TopTodo() 67 newTodo.item = textField.text! 68 69 let realm = try! Realm() 70 71 // トランザクション開始 72 try! realm.write({ () -> Void in 73 realm.add(newTodo) 74 print("ToDo Saved") 75 }) 76 // ここでトランザクションが終了 77 78 // ここでtodoItemの更新 79 self.todoItem = realm.objects(TopTodo.self) 80 self.TopViewTabelView.insertRows(at: [IndexPath(row: 0, section: 0)],with: UITableViewRowAnimation.automatic) 81 print(textField.text!) 82 83 } 84 self.TopViewTabelView.reloadData() 85 } 86 }) 87 alert.addAction(okAction) 88 89 // キャンセルボタンの設定 90 let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 91 alert.addAction(cancelAction) 92 93 // テキストフィールドを追加 94 alert.addTextField(configurationHandler: {(textField: UITextField!) -> Void in 95 textField.placeholder = "テキスト" 96 }) 97 alert.view.setNeedsLayout() // シミュレータの種類によっては、これがないと警告が発生 98 99 self.present(alert, animated: true, completion: nil) 100 } 101 102 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 103 return todoItem.count 104 return side.count 105 } 106 107 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 108 let Cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 109 110 let object = todoItem[indexPath.row] 111 let now = NSDate()//object.date// // 現在日時の取得 112 113 114 115 let dateFormatter = DateFormatter() 116 dateFormatter.locale = NSLocale(localeIdentifier: "en_US") as Locale? // ロケールの設定 117 dateFormatter.dateFormat = "yyyy年MM月dd日 HH:mm"//:ss" // 日付フォーマットの設定 118 119 let dateString = dateFormatter.string(from: now as Date) 120 print(dateString) // -> 2014/06/25 02:13:18*/ 121 122 123 Cell.textLabel?.text = object.item 124 Cell.detailTextLabel?.text = dateString 125 print(object.date) 126 127 return Cell 128 129 let cell = tableView.dequeueReusableCell(withIdentifier: "impotant", for: indexPath) 130 cell.textLabel?.text = side[indexPath.row] 131 return cell 132 } 133 134 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 135 136 137 if(editingStyle == UITableViewCellEditingStyle.delete) { 138 139 let realm = try! Realm() 140 try! realm.write { 141 realm.delete(self.todoItem[indexPath.row]) 142 } 143 TopViewTabelView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.fade) 144 TopViewTabelView.reloadData() 145 } 146 } 147 148 @IBAction func seidemenu(_ sender: Any) { 149 150 if isSlidemenuHidden{ 151 sidemenuconstant.isHidden = false 152 }else{ 153 sidemenuconstant.isHidden = true 154 } 155 } 156 157 158 159}

実現したい事

サイドメニューをボタンをタップ時に表示させ、サイドメニュー以外をタップ時に隠れるようにしたい。

できている事

サイドメニューをViewで作りその中にtableViewを入れました。
そして、サイドメニューをデフォルト時に表示させない為にishiddenで隠しました。

###困っている事
ボタンをタップ時に表示されなく困っています。
また、一つのViewcontrollerに二つのtableViewを入れた時の処理のコーディングが分からなくて困っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ボタンをタップ時に表示されなく困っています。

コードを見た限りでは、isSlidemenuHiddenという変数で判定を行うように実装しているようですが、
この変数が書き換わる箇所が無いため、isHiddenを切り替える際の判定が上手く動かない可能性が見られました。

swift

1 @IBAction func seidemenu(_ sender: Any) { 2 3 if isSlidemenuHidden{ //この変数が書き換わる場所が無いため、常に片方にしか分岐が入らない? 4 sidemenuconstant.isHidden = false 5 }else{ 6 sidemenuconstant.isHidden = true 7 } 8 }

上記については、isSlidemenuHiddenの箇所をsidemenuconstant.isHiddenに書き換える。
またはsidemenuconstant.isHiddenを書き換えた際にisSlidemenuHiddenの値も書き換える。
isSlidemenuHidden自体を常にsidemenuconstant.isHiddenの値を返すようにする、などが考えられます。

※コードのみでは判断し辛い部分がありますので、以下の点などについてもご注意ください。
・ボタンのアクションが紐付いているか(ボタンタップ時にseidemenu()が呼び出されているか)
・サイドメニュー(sidemenuconstant)の重なり順などによって、isHiddenがfalseとなっていても他のViewに隠れて表示されない状況になっていないか

また、一つのViewcontrollerに二つのtableViewを入れた時の処理のコーディングが分からなくて困っています。

こちらについては、UITableViewのデータソース、デリゲートメソッドでは引数としてtableViewが渡ってきますので、以下の様に各メソッドでtableViewを判定材料に処理を分岐すれば良いと思います。

※この引数のtableViewは実行元のtableViewが渡ってきます。tableViewに限らずscrollViewやその他のUIKit系のデリゲートメソッドでも同じ様な設計となっている事が多いです。

swift

1 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 2 if tableView == TopViewTabelView { 3 // TopViewTabelViewの場合 4 return todoItem.count 5 } else if tableView == sideTableView { 6 // sideTableViewの場合 7 return side.count 8 } else { 9 // それ以外 10 return 0 11 } 12 }

投稿2018/06/26 07:36

fumiaki

総合スコア56

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

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

退会済みユーザー

退会済みユーザー

2018/06/27 15:15

ありがとうございます。解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問