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

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

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

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

Q&A

解決済

1回答

1645閲覧

PagingMenuController MenuItemViewCustomizableのカスタマイズについて swift4

ludolf

総合スコア39

Swift

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

0グッド

0クリップ

投稿2019/07/29 04:46

いつもお世話になっております。

早速ですが、PagingMenuControllerを用いてWebアプリを作っているのですが、
MenuitemViewCustomizableのカスタマイズ性についてお聞きしたいです。

//公式サイト
https://github.com/kitasuke/PagingMenuController/blob/master/README.md

//参考サイト
https://nobuhiroharada.com/2018/01/28/swift4-pagingmenu/

公式サイトにあるMenuitemViewCustomizableのMenuItemTextですが、返り値は「text」「multilineText」「image」「custom」を返すことができ、それぞれのシュチュエーションに合わして変更できると思います。
自分は「text」を使用して各タブに赤・青・黄とテキストを追加したんですが、色も変えようとして上記参考サイトを参考に引数「color」「selectColor」を使用して文字色と選択された時の文字色を変更してみました。
タブの背景色も変えたいので公式サイトで引数はどんぐらいあるのか見たのですが、「text」の引数は「title」だけみたいなんですね。
「color」「selectColor」が公式では記入されていないのになぜ動いているのか理解できなくて質問した次第です。
なぜ動いているのかと背景色を設定するにはどのようにしたら良いかご教授頂ければと思います。

swift4

1import UIKit 2import PagingMenuController 3 4class ViewController: UIViewController { 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 // PagingMenuController追加 9 let options = PagingMenuOptions() 10 let pagingMenuController = PagingMenuController(options: options) 11 12 // 高さ調整。この2行を追加 13 pagingMenuController.view.frame.origin.y += 20 14 pagingMenuController.view.frame.size.height -= 20 15 16 self.addChild(pagingMenuController) 17 self.view.addSubview(pagingMenuController.view) 18 pagingMenuController.didMove(toParent: self) 19 } 20 21 override func didReceiveMemoryWarning() { 22 super.didReceiveMemoryWarning() 23 // Dispose of any resources that can be recreated. 24 } 25 26} 27 28private struct PagingMenuOptions: PagingMenuControllerCustomizable { 29 let pv1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PagingMenuVC1") 30 let pv2 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PagingMenuVC2") 31 let pv3 = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PagingMenuVC3") 32 33 fileprivate var componentType: ComponentType { 34 return .all(menuOptions: MenuOptions(), pagingControllers: pagingControllers) 35 } 36 37 fileprivate var pagingControllers: [UIViewController] { 38 return [pv1, pv2, pv3] 39 } 40 41 fileprivate struct MenuOptions: MenuViewCustomizable { 42 var displayMode: MenuDisplayMode { 43// return .infinite(widthMode: .flexible, scrollingMode: .scrollEnabled) 44 return .segmentedControl 45 } 46 var height: CGFloat { 47 return 40 48 } 49 var backgroundColor: UIColor { 50 return UIColor.lightGray 51 } 52 var selectedBackgroundColor: UIColor { 53 return UIColor.lightText 54 } 55 var focusMode: MenuFocusMode { 56 return .underline(height: 3, color: UIColor.black, horizontalPadding: 0, verticalPadding: 0) 57 } 58 var itemsOptions: [MenuItemViewCustomizable] { 59 return [MenuItem1(), MenuItem2(), MenuItem3()] 60 } 61 } 62 63 64 fileprivate struct MenuItem1: MenuItemViewCustomizable { 65 var displayMode: MenuItemDisplayMode { 66 return .text(title: MenuItemText(text: "赤い画面", color: UIColor.red, selectedColor: UIColor.white)) 67 } 68 } 69 70 fileprivate struct MenuItem2: MenuItemViewCustomizable { 71 var displayMode: MenuItemDisplayMode { 72 return .text(title: MenuItemText(text: "青い画面", color: UIColor.blue, selectedColor: UIColor.white)) 73 } 74 } 75 76 fileprivate struct MenuItem3: MenuItemViewCustomizable { 77 var displayMode: MenuItemDisplayMode { 78 return .text(title: MenuItemText(text: "黄色い画面", color: UIColor.yellow, selectedColor: UIColor.yellow)) 79 } 80 } 81 82}

(下の画像のように引数はtitleしかないです。)
イメージ説明

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

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

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

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

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

fuzzball

2019/07/29 07:02

MenuItemTextを渡していることに気付いていないような気が。 let title = MenuItemText(text: "赤い画面", color: UIColor.red, selectedColor: UIColor.white) return .text(title: title) こう書き直せば分かるかな。
ludolf

2019/07/29 07:40

早速のご回答ありがとうございます! つまり「.text」はMenuItemTextを宣言した変数だからMenuItemTextのデフォルト引数しか使えないというわけですね。 だからbackgroundColorを指定しても引数にそんなの無いよと怒られたのですね笑 ありがとうございました。
ludolf

2019/07/29 08:00

すみません、、自分の認識が間違っているのは「.text」の件でしょうか? .text(title:MenuItemText) .textはMenuItemDisplayModeの返り値の候補で、.textの中にあるtitleがMenuItemTextを渡しているという解釈でしょうか? すみません初めて半年で聞くことが多いです、、
fuzzball

2019/07/29 08:24

とりあえず私のは回答じゃない(余計なことを言ってるだけかも知れない)ので、まずはtakabosoftさんの回答をどうぞ。
guest

回答1

0

ベストアンサー

こんにちは。
わかるところだけ。

タブの背景色も変えたいので公式サイトで引数はどんぐらいあるのか見たのですが、「text」の引数は「title」だけみたいなんですね。

「color」「selectColor」が公式では記入されていないのになぜ動いているのか理解できなくて質問した次第です。
なぜ動いているのか

これはMenuItemTextのイニシャライザを見てもらえれば判ると思います。
デフォルト引数になっているだけです。

swift

1public struct MenuItemText { 2 let text: String 3 let color: UIColor 4 let selectedColor: UIColor 5 let font: UIFont 6 let selectedFont: UIFont 7 8 public init(text: String = "Menu", 9 color: UIColor = UIColor.lightGray, 10 selectedColor: UIColor = UIColor.black, 11 font: UIFont = UIFont.systemFont(ofSize: 16), 12 selectedFont: UIFont = UIFont.systemFont(ofSize: 16)) { 13 self.text = text 14 self.color = color 15 self.selectedColor = selectedColor 16 self.font = font 17 self.selectedFont = selectedFont 18 } 19}

投稿2019/07/29 06:39

編集2019/07/29 06:40
takabosoft

総合スコア8356

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

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

ludolf

2019/07/29 08:22

早速の回答ありがとうございます。 いつも分かりやすい説明ありがとうございます! titleがMenuItemTextなのでデフォルトの4つが使えるということですね、、 fuzzballさんが例でやってくれた式と上記のイニシャライザを見て理解できました! (完全には理解できていないと思う、、) 大変助かっております、お二方にベストアンサーしたいところですがtakabosoftさんにいたします。 ありがとうございました!!
takabosoft

2019/07/29 08:27

ちょっと心配ですが「値付きenum」と「デフォルト引数」について理解を深めてもらえば良いかなと思います。
ludolf

2019/07/29 09:06

>値付きenum」と「デフォルト引数」 助言までありがとうございます! 勉強して出直して来ます、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問