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

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

新規登録して質問してみよう
ただいま回答率
85.39%
Xcode 7

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

3572閲覧

HMSegmentedControlにてタブ部分とScrollViewを連動させる方法

tgmdik

総合スコア12

Xcode 7

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/09/13 09:25

編集2016/09/13 09:29

###前提・実現したいこと
http://dev.classmethod.jp/smartphone/ios_oss_hmsegmentedcontrol/
上記サイトを参考にHMSegmentedControlにてタブを作成中です。

そこで、タブ部分を横スライドやタップするとそれに伴いscrollviewも切り替わるんですが、
scrollview部分を横スライドしてもscrollviewの切り替えに伴ってタブが切り替わりません。

これを連動させるにはどうすればいいでしょうか。よろしくお願いします。

###該当のソースコード

swift

1 override func viewDidLoad() { 2 super.viewDidLoad() 3 4 segmentedControl = HMSegmentedControl(frame: CGRectMake(0, statusbarHeight, self.view.frame.size.width, self.headerView.frame.size.height)) 5 segmentedControl.selectionIndicatorColor = UIColor(red: 1.18, green: 1.80, blue: 1.53, alpha: 0.8) 6 7 let segmentControls = HMSegmentedControl(frame: CGRectMake(0, statusbarHeight, self.view.frame.size.width, self.headerView.frame.size.height)) 8 self.view.addSubview(segmentControls) 9 10 segmentControls.sectionImages = [UIImage(named: "star")!, UIImage(named: "home")!, UIImage(named: "search")!] 11 segmentControls.sectionSelectedImages = [UIImage(named: "starSelected")!, UIImage(named: "homeSelected")!, UIImage(named: "searchSelected")!] 12 segmentControls.selectedSegmentIndex = 1 13 14 let blockVariable :IndexChangeBlock = {(index:Int) -> Void in 15 let frame = CGRectMake(self.scrollView.frame.size.width * CGFloat(index), 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height) 16 self.scrollView.scrollRectToVisible(frame, animated: true) 17 print(index) 18 } 19 segmentControls.indexChangeBlock = blockVariable 20 21 scrollView.pagingEnabled = true 22 scrollView.showsHorizontalScrollIndicator = false 23 scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.scrollView.frame.size.height) 24 scrollView.delegate = self.uiScrollViewDelegate 25 26 let page1view = UIView(frame: CGRectMake(0, 0, self.view.frame.size.width, self.scrollView.frame.size.height)) 27 page1view.backgroundColor = UIColor.blueColor() 28 self.scrollView.addSubview(page1view) 29 30 let page2view = UIView(frame: CGRectMake(self.view.frame.size.width, 0, self.view.frame.size.width, self.scrollView.frame.size.height)) 31 page2view.backgroundColor = UIColor.redColor() 32 self.scrollView.addSubview(page2view) 33 34 let page3view = UIView(frame: CGRectMake(self.view.frame.size.width * 2, 0, self.view.frame.size.width, self.scrollView.frame.size.height)) 35 page3view.backgroundColor = UIColor.greenColor() 36 self.scrollView.addSubview(page3view) 37 38 39 // Do any additional setup after loading the view, typically from a nib. 40 41 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のようにするとタブの位置を変えられると思います。

ちなみにdelegateのセットはscrollView.delegate = selfで良いです。

swift

1func scrollViewDidEndDecelerating(scrollView: UIScrollView) { 2 segmentControls.selectedSegmentIndex = Int(scrollView.contentOffset.x / scrollView.frame.maxX) 3}

★ 検証したコード

swift

1import UIKit 2 3class ViewController: UIViewController, UIScrollViewDelegate { 4 5 @IBOutlet weak var scrollView: UIScrollView! 6 @IBOutlet weak var headerView: UIView! 7 8 var segmentedControl: HMSegmentedControl! 9 var segmentControls: HMSegmentedControl! 10 11 var statusbarHeight: CGFloat = 20 12 13 var isTabSelected = false 14 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 19 segmentedControl = HMSegmentedControl(frame: CGRectMake(0, statusbarHeight, self.view.frame.size.width, self.headerView.frame.size.height)) 20 segmentedControl.selectionIndicatorColor = UIColor(red: 1.18, green: 1.80, blue: 1.53, alpha: 0.8) 21 22 segmentControls = HMSegmentedControl(frame: CGRectMake(0, statusbarHeight, self.view.frame.size.width, self.headerView.frame.size.height)) 23 self.view.addSubview(segmentControls) 24 25 segmentControls.sectionTitles = ["ITEM ONE", "ITEM TWO", "ITEM THREE"] 26// segmentControls.sectionImages = [UIImage(named: "star")!, UIImage(named: "home")!, UIImage(named: "search")!] 27// segmentControls.sectionSelectedImages = [UIImage(named: "starSelected")!, UIImage(named: "homeSelected")!, UIImage(named: "searchSelected")!] 28 segmentControls.selectedSegmentIndex = 1 29 30 let blockVariable :IndexChangeBlock = {(index:Int) -> Void in 31 32 self.isTabSelected = true 33 34 let frame = CGRectMake(self.scrollView.frame.size.width * CGFloat(index), 0, self.scrollView.frame.size.width, self.scrollView.frame.size.height) 35 self.scrollView.scrollRectToVisible(frame, animated: true) 36 print(index) 37 } 38 39 segmentControls.indexChangeBlock = blockVariable 40 41 scrollView.pagingEnabled = true 42 scrollView.showsHorizontalScrollIndicator = false 43 scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.scrollView.frame.size.height) 44 scrollView.delegate = self 45 46 let page1view = UIView(frame: CGRectMake(0, 0, self.view.frame.size.width, self.scrollView.frame.size.height)) 47 page1view.backgroundColor = UIColor.blueColor() 48 self.scrollView.addSubview(page1view) 49 50 let page2view = UIView(frame: CGRectMake(self.view.frame.size.width, 0, self.view.frame.size.width, self.scrollView.frame.size.height)) 51 page2view.backgroundColor = UIColor.redColor() 52 self.scrollView.addSubview(page2view) 53 54 let page3view = UIView(frame: CGRectMake(self.view.frame.size.width * 2, 0, self.view.frame.size.width, self.scrollView.frame.size.height)) 55 page3view.backgroundColor = UIColor.greenColor() 56 self.scrollView.addSubview(page3view) 57 } 58 59 func scrollViewDidEndDecelerating(scrollView: UIScrollView) { 60 segmentControls.selectedSegmentIndex = Int(scrollView.contentOffset.x / scrollView.frame.maxX) 61 62 } 63} 64

投稿2016/09/13 11:40

編集2016/09/13 11:41
_Kentarou

総合スコア8490

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

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

tgmdik

2016/09/14 11:24

実現できました!ありがとうございます。 delegateのセットに関してもご指摘頂き、ありがとうございましたm(. . )m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問