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

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

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

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

Q&A

解決済

1回答

2481閲覧

ScrollViewについて

tosi_1211

総合スコア138

Swift

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

0グッド

0クリップ

投稿2016/05/20 13:56

画面全体をscrollViewで覆っていて、その下にUIButtonがあります。
このボタンタップを適用させたいので、
scrollViewのuserinteractionEnabledをfalseにしました。

ですがこの状態だとscrollできません!どうすればいいですか?

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

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

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

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

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

Stripe

2016/05/20 14:09

つまり、そのボタンは見えない状態になっている、ということですか?
tosi_1211

2016/05/21 06:34

見える状態です。ただ上にscrollViewをかぶせただけなので
guest

回答1

0

ベストアンサー

UIScrollViewのhitTestをオーバーライドしたらできそうだなと思ってやってみたらできました。
ボタンのある座標をタッチした時は、スクロールビューにヒットしなかったことにすればよいです。

Swift

1import UIKit 2 3class TouchThroughScrollView: UIScrollView { 4 5 weak var button:UIButton! 6 7 override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? { 8 if button != nil { 9 let buttonFrame = button!.convertRect(button!.bounds, toView: self) 10 if CGRectContainsPoint(buttonFrame, point) { 11 return nil 12 } 13 } 14 return super.hitTest(point, withEvent: event) 15 } 16}

UIScrollViewを上記のTouchThroughScrollViewに変更して、userinteractionEnabledをtrueにしてください。
ViewControllerのviewDidLoadのタイミングで、TouchThroughScrollViewのbuttonプロパティに、タップに反応させたいボタンを設定してください。

投稿2016/05/23 13:39

TakeOne

総合スコア6299

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

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

tosi_1211

2016/05/24 02:43

試してみます!やはりこういう情報は海外のサイトなどから取り入れるのですか?
tosi_1211

2016/05/24 03:25

var button = touchThroughScrollView.button! この行を書くとnilになってしまうのですが原因がわかりません。
TakeOne

2016/05/24 03:56

もしStoryboardを使っているなら、スクロールビュー(TouchThroughScrollView)とその下にボタンを配置した画面が定義されていると思いますが、それでTouchThroughScrollViewを touchThroughScrollViewという名前でアウトレット接続し、ボタンをunderButtonという名前でアウトレット接続しているなら、viewDidLoadのタイミングで touchThroughScrollView.button = underButton として、反応させるべきボタンをtouchThroughScrollViewに登録してくださいということです。 自分の状況に合わせて具体的に説明してもらわないとわからないなら、今自分が作っているコーディングを開示してください。
tosi_1211

2016/05/25 07:17

できました!ありがとうございます!!!!!
tosi_1211

2016/05/26 04:38

ボタンが複数ある場合、 そのボタンを配列としてもたせて、for in文で回すのがベストプラクティスでしょうか??
TakeOne

2016/05/26 04:57

> ボタンが複数ある場合、そのボタンを配列としてもたせて、for in文で回すのがベストプラクティスでしょうか?? 今のビュー構成を踏襲するならそうでしょうね。 そもそもなぜスクロールビューの下にボタンを置きたいのかわかってないので、本来のベストプラクティスは、スクロールビューの上にボタンを置くことのようにも思えます。要件に合うかどうかわかりませんが、透明なボタンを一番上に貼るという手もあると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問