20210801のSwiftに関する記事は3件です。

Realmからデータを取得してUISegmentedControlに表示

こんな感じです コードと簡単解説 let realm = try Realm()でRealm()のインスタンスを作成します for文でrealm.objects(RealmDataSets.self)で取得したRealmの値をreadRealmTagに入れます。 realmTagArray.allSatisfyでreadRealmTagの値がrealmTagArrayの全ての値に、同じものがないのなら、realmTagArray.append(readRealmTag.tag)で配列に値を追加します。 同じタイトルのSegmentができない様に、realmTagArrayの中に同じ値が入らない様にしています。 ~~~一部省略~~~ var realmTagArray = [String]() func readRealmTag(){ do{ let realm = try Realm() realmTagArray = [] for readRealmTag in realm.objects(RealmDataSets.self){ if realmTagArray.allSatisfy({$0 != readRealmTag.tag}) == true{ realmTagArray.append(readRealmTag.tag) } } }catch{ //エラー処理など } } .removeAllSegments()でSegmentを削除出来ます。(新しいSegmentを作る際に、以前作成したSegmentが残ってると古いSegmentの上に新しいSegmentが表示されてしまい、変な見た目になります。) エラー回避のためにrealmCRUDModel.realmTagArray.countが0の時はSegmentを作成させない様にします。 UISegmentedControl()は簡単にですがこちらで解説しました。Buttonを押すとSegmentが増える(UISegmentedControl) ~~~一部省略~~~ var uiSegmentControl = UISegmentedControl() let realmCRUDModel = RealmCRUDModel() func createSegment(targetView:UIView){ realmCRUDModel.readRealmTag() uiSegmentControl.removeAllSegments() if realmCRUDModel.realmTagArray.count != 0{ for segmentCount in 0...realmCRUDModel.realmTagArray.count - 1{ uiSegmentControl.insertSegment(withTitle: realmCRUDModel.realmTagArray[segmentCount], at: segmentCount, animated: true) } } uiSegmentControl.frame = CGRect(x: targetView.bounds.minX + 5, y: targetView.bounds.minY + 97, width: targetView.frame.size.width - 10, height: 32) uiSegmentControl.selectedSegmentTintColor = UIColor(red: 1.0, green: 0.40, blue: 0.51, alpha: 1.0) targetView.addSubview(uiSegmentControl) } 終わり 最近、作っているアプリからの内容でした。 ご指摘、ご質問などありましたら、コメントまでお願い致します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[SwiftUI] NavigationBar の背景色を変える方法

こんな感じです: large inline ↓Backボタンを表示するために NavigationLink 先を preview しています import SwiftUI struct LargeTitleView: View { init() { UINavigationBar.appearance().backgroundColor = .blue // 背景色 UINavigationBar.appearance().largeTitleTextAttributes = [ .foregroundColor: UIColor.white] // タイトル色 UINavigationBar.appearance().tintColor = .white // backボタン色 } var body: some View { VStack { Text("Hello, world!") .navigationTitle("title") } } } struct InlineTitleView: View { init() { UINavigationBar.appearance().barTintColor = UIColor.blue // 背景色 UINavigationBar.appearance().titleTextAttributes = [ .foregroundColor: UIColor.white] // タイトル色 UINavigationBar.appearance().tintColor = .white // backボタン色 } var body: some View { VStack { Text("Hello, world!") .navigationTitle("title") .navigationBarTitleDisplayMode(.inline) } } } struct TitleView_Previews: PreviewProvider { static var previews: some View { Group { NavigationView { NavigationLink(destination: LargeTitleView(), isActive: .constant(true)) { EmptyView() } } NavigationView { NavigationLink(destination: InlineTitleView(), isActive: .constant(true)) { EmptyView() } } } } } バージョン Swift 5.4
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Value of optional type ‘Int?’ must be unwrapped to a value of type ‘Int’などの「?」マークの回避方法

swiftでプログラムを書いていると下の画像のように「?」が邪魔をして変数に上手く代入できない事がある。 上の画像のようなOptional(?マーク)を外して使用したい場合は ViewContoroller.swift guard let example = i else { return } のようにguard letの変数で代入してあげることで使用できるようになる。 [参考記事] url:https://saisai-weblink.com/2021/08/01/value-of-optional-type-int-must-be-unwrapped-to-a-value-of-type-intなどの「?」マークの回避方/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む