teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コメント欄にソースコードも書きたかったため

2015/08/01 17:45

投稿

yoppy0066
yoppy0066

スコア293

title CHANGED
File without changes
body CHANGED
@@ -55,4 +55,71 @@
55
55
  }
56
56
  `
57
57
 
58
- mvcとかあんまりわかってないので全然ちがってたらすみませんが、どなたかご教授いただけないでしょうか
58
+ mvcとかあんまりわかってないので全然ちがってたらすみませんが、どなたかご教授いただけないでしょうか
59
+
60
+
61
+ > __moaiさんへ
62
+ 実装したい機能のイメージとしては以下のようなものになります
63
+ 1. セグメントコントロールに新着・人気がある
64
+ 2. セグメントコントロールの下にリストがある(テーブルビューで実装)
65
+ 3. リストの各セルにはブックマークボタンがあり、登録中・解除中で色が変わる
66
+ 4. リストのセルをタップすると詳細画面へ遷移する
67
+ 5. 詳細画面にもブックマークボタンがある
68
+
69
+ で、悩み出した原因としては詳細ページでブックマークして一覧に戻ったときにブックマークの状態をリストにも反映させなくてはいけないなというところから始まりました。
70
+ また、セグメントコントロールを切り替えた際にも同様の問題が起きえます
71
+
72
+ そして今検討中のコードが以下のようなものになります
73
+
74
+ `
75
+ class ModelDemo : NSObject {
76
+ // 新着リスト・人気リスト
77
+ dynamic var list: [Dictionary<String,AnyObject>] = [Dictionary<String,AnyObject>]()
78
+ dynamic var list2: [Dictionary<String,AnyObject>] = [Dictionary<String,AnyObject>]()
79
+
80
+ class var sharedInstance : ModelNotes {
81
+ ・・・
82
+ }
83
+
84
+ // APIの処理など
85
+ }
86
+
87
+ // 一覧ページ
88
+ class ListViewController : UIViewController {
89
+ override func viewDidLoad() {
90
+ super.viewDidLoad()
91
+
92
+ // リストデータの監視
93
+ ModelDemo.sharedInstance.addObserver(self, forKeyPath: "list", options: .New, context: nil)
94
+ // apiでのデータ取得
95
+ ModelDemo.sharedInstance.getList()
96
+ }
97
+
98
+ // データの監視
99
+ override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
100
+ tableView.reloadData()
101
+ }
102
+
103
+ // ブックマーククリック
104
+ func onclickBookmark(sender: UIButton) {
105
+ // apiをたたいて更新
106
+ ModelDemo.sharedInstance.update(・・・)
107
+ // 画面更新のためにこちらも更新
108
+ ModelDemo.sharedInstance.list[sender.tag]["isBookmark"] = true
109
+ }
110
+ }
111
+
112
+ // 詳細画面
113
+ class DetailViewController: UIViewController {
114
+ // 選択された行番号
115
+ var row: Int!
116
+
117
+ // ブックマーククリック
118
+ func onclickBookmark(sender: UIButton) {
119
+ // apiをたたいて更新
120
+ ModelDemo.sharedInstance.update(・・・)
121
+ // 画面更新のためにこちらも更新
122
+ ModelDemo.sharedInstance.list[row] = true
123
+ }
124
+ }
125
+ `