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

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

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

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

Q&A

解決済

1回答

2099閲覧

Segmented controlを使って2つのTableView(Static Cell)画面を表示する方法(TableViewにクラスを割り当てるとStatic Cellの画面が消える不具合の是正

Tomzy

総合スコア104

Swift

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

0グッド

0クリップ

投稿2018/09/24 06:49

編集2018/09/24 08:32

###問題点の概要と質問

TableViewにクラスを割り当てるとStatic Cellの画面が消える不具合に関しての質問です。

やったことはviewControllerにナビゲーションバーを配置し、そこにsegmented controlを置き、2つのTableViewのうち選択した画面を表示することを試しています。viewControllerにAとB2つのcontainerViewを配置した上で、それぞれのcontainerViewとTableViewControllerをEmbedで結合しました。Segmented controlによりcontainerViewを選択するアクションをコードで書き込みました。

Swift3で動的にUIViewを切り替える Part2 他のサイト情報を参考にしました。

Segmented controlのアクションは首尾良くStatic Cellで作成した2つの画面を表示しました。しかし、それぞれのTableViewにClass(別途作成した2つのTableViewファイル)を割り当てるとSegmented controlで表示される画面は単純な線だけのTableViewになってしまいます。TableViewに配置したボタン、ラベル、textFieldの操作をコードで書き込みたいのですが先に進みません。

下記に今までの操作を説明しますので、どこが間違っているのか、対処をご教示ください。

今までの操作内容

対象のストーリーボード

イメージ説明

ビルド結果の2つのTableView画面(画面は設計中で最終版ではありません)

イメージ説明
イメージ説明

ViewControllerのコード

import UIKit class FirstViewController: UIViewController { @IBOutlet weak var kirikaeSegmentedControl: UISegmentedControl! // ① @IBOutlet weak var containerView: UIView! @IBOutlet weak var containerA: UIView! @IBOutlet weak var containerB: UIView! var containers: Array<UIView> = [] // ② override func viewDidLoad() { super.viewDidLoad() containers = [containerA,containerB] containerView.bringSubview(toFront: containerA) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } @IBAction func changeContainerView(_ sender: UISegmentedControl) { // ③ let currentContainerView = containers[sender.selectedSegmentIndex] containerView.bringSubview(toFront: currentContainerView) } }

不具合が発生した操作

新規にTableViewファイルを2つ作りSave01TableViewController.swiftとSave02TableViewController.swiftと名づけました。コードは何も書き込んでいないので下記のとおりです。

import UIKit class Save01TableViewController: UITableViewController { override func viewDidLoad() { super.viewDidLoad() // Uncomment the following line to preserve selection between presentations // self.clearsSelectionOnViewWillAppear = false // Uncomment the following line to display an Edit button in the navigation bar for this view controller. // self.navigationItem.rightBarButtonItem = self.editButtonItem } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } // MARK: - Table view data source override func numberOfSections(in tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 0 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return 0 } }

先に作ったTableViewのCustomClassにSave01TableViewControllerを選んでビルドすると
Segmented controlは有効にTableViewを選択するのですが、下記の画像のように単純な線だけのTableViewしか現れません。
イメージ説明
イメージ説明
イメージ説明

それもCustomClassの選び方により線だけの現れ具合が変わります。

A B 共にブランクの場合は A B 画面共に正常
Aだけ選びBはブランクの場合 A B 画面共に線だけ
AはブランクB は選ぶと   A B 画面共に線だけ
A B 共に選ぶと      Aは線だけ B 画面は正常

#ご参考事項
環境は下記のとおりです。
MacBook Pro (15-inch, 2016)
High Sierra OS10.13.6
Version 9.4 (9F1027a)Swift4

よろしくお願いします。

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

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

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

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

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

xAxis

2018/09/24 07:54

ContainerViewにembedされたViewControllerのクラスはUIViewControllerですか?それともUITableViewControllerですか?
Tomzy

2018/09/24 08:21

UITableViewControllerです
guest

回答1

0

ベストアンサー

Save01TableViewControllerにある二つoverrideしてある関数numberOfSections(in:)tableView(_:numberOfRowsInSection:)をコメントアウトしてみてください。

swift

1/* 2 override func numberOfSections(in tableView: UITableView) -> Int { 3 // #warning Incomplete implementation, return the number of sections 4 return 0 5 } 6 7 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 8 // #warning Incomplete implementation, return the number of rows 9 return 0 10 } 11*/ 12 13//こんな感じで

投稿2018/09/24 08:50

編集2018/09/24 08:51
xAxis

総合スコア1349

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

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

Tomzy

2018/09/24 10:42

コメントアウトしましたら、正常に機能しました。ありがとうございました。もう少し書いてあるコードの意味を理解しながら進めないといけないですね。うかつでした。 ところでお世話になりました「音声入力アシスト」は7月にバージョンアップも完成してリリース致しました。現在は「乗換時刻メモ」を開発していますが、苦戦が続いています。この問題が解決したのでひとつひとつ解決していきたいと思っています。
xAxis

2018/09/24 13:10

無事解決してよかったです。StaticCellsはDynamicPrototypesに比べてどうしても情報が少ないというのもありますしこういうこともありますよ。 コメント欄ですし多少個人的なことを書いても問題ないですかね。 お久しぶりです。私自身はテレビは見ないのですが、Tomzyさんだろう方のお話を様々な人や方面から聞いており、音声入力アシストに関して微力ながらお手伝いさせていただいた身としては嬉しく思っておりました。更に音声入力アシストのリリースとバージョンアップおめでとうございます。サービスのリリースだけでなく保守・運用までされてらっしゃるのは素晴らしく素敵なことだと思います。 次は乗換時刻メモというのは音声入力アシスト同様にホスピタリティのあるアプリのようですね。アプリ開発はどうしても苦しい部分がありますね。私も今開発しているアプリで苦戦しております。 もし私の分かる範囲の質問でありましたらまたどうぞ。
Tomzy

2018/09/27 07:12

xAxisさんへ こんにちは。メッセージありがとうございました。 お陰様でシニアプログラミングネットワークの関係でいろいろ講演会に呼ばれたりマスコミにも少しでています。先週の土曜日もCODE for JAPAN SUMMIT 2018より招かれて新潟で講演をしてきました。現在取り組んでいる「乗換時刻メモ」はいろいろな乗換アプリを使って調べた時刻も年寄りは瞬時に忘れるので時刻を簡単に記録するメモを作っています。更に、良く定期的に通うイベントへ行く時刻表も一覧表にしてまとめたり、よく使う駅ごとの時刻表を一覧表にする機能も持たせ用と思っています。 本日は複数のSegmented controlボタンをひとつのIBActionで処理する方法にチャレンジして先ほど成功しました。これから保存を解除する場合のアラートを出す方法をやろうかと思っています。このアプリの最大の難関ははじめて行うデーターベース処理です。Realmを勉強中です。 今後ともよろしくお願いします。 トミ爺
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問