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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

1784閲覧

xcodeでボタン二つで、他方のボタンが押されてるかどうかで処理分けしたい

ke-ki

総合スコア11

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2016/01/19 06:53

###前提・実現したいこと
Xcodeでアプリを作っており、
↑ボタンと↓ボタンを二つおき、
↑を押した時は数字を1プラス、↓を押した時は数字を1マイナスなのですが、
↑が押されている状態で↓が押されたら、
↑が解除されて(この時点で1マイナス)、↓が押されて(さらに数字が1マイナスされる)されるという機能を実装したいです。なにか、良い方法を教えていただけないでしょうか?

###発生している問題・エラーメッセージ

カスタムボタンなので、それぞれのクラスファイルを作り、
sharedInstanceでアクセスできるかと思っていましたが、当たり前ですが、Instanceなので、初期値になってしまい、他方のボタンが押されているかどうかにアクセスするにはどうしたらいいかわかりません。
(コードやInstanceなどの部分で解釈に間違いがありましたら申し訳ございません。)

↑が押されてる状態で、↓が押された場合に−2するのようにしたくない理由は、↑、↓ともに押されている状態と押されていない状態で画像も分けたいですし、snsの投票のような機能として実装したいのでサーバーに自分が押してるかどうかも保存したいと思っています。
###LikeButton.swift

import UIKit class LikeButton: UIButton { var like_id:String! var row:Int! var isReply:Bool = false let defaultImage: UIImage = UIImage(named: "up_arrow")! var isPressed:Bool = false struct Singleton { static let sharedInstance = LikeButton() } class var sharedInstance: LikeButton { return Singleton.sharedInstance } override func awakeFromNib() { self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) } //押された時、押されてたらfalseにする。押されてなかったらtrueにする。 func togglePressed() { //likeボタンを押された時に、likeボタンはすでに自分で押されてたとき if isPressed == true { self.selected = false isPressed = false self.setImage(UIImage(named: "up_arrow"), forState: .Normal) println("ここまで1") //likeボタンがすでに押されてなかった時 }else{ //dislikeボタンが押されてたとき if DislikeButton.sharedInstance.isPressed == true { println("ここまで2") //dislikeボタンを解除して DislikeButton.sharedInstance.isPressed = false DislikeButton.sharedInstance.selected = false //dislikeボタンを黒に戻す行 DislikeButton.sharedInstance.setImage(UIImage(named: "down_arrow"), forState: .Normal) isPressed = true self.selected = true self.setImage(UIImage(named: "up_p_arrow"), forState: .Normal) //dislikeボタンが押されてなかった時(何も押されてなかった時) }else{ isPressed = true self.selected = true self.setImage(UIImage(named: "up_p_arrow"), forState: .Normal) println("ここまで3") } } } func buttonClicked(sender:UIButton) { if sender == self { println(DislikeButton.sharedInstance.isPressed) let cell = sender.superview?.superview as! TweetTableViewCell! // パラメータ調整 var param = [String:String]() switch cell.likeBt.isReply{ //replyから case true: println("from reply") param["tweet_type"] = Const.TWEET_TYPE.REPLY if let isMyLike = self.like_id { param["id"] = isMyLike } switch self.isPressed{ case true: //likeがおされてて、それを消す場合の処理 LikeDelete() case false: if DislikeButton.sharedInstance.isPressed == true{ //dislikeが押されてて、それを消して、likeを登録する時 DislikeButton.sharedInstance.DislikeDelete() LikePost() }else{ //何も押されてなくて、likeを登録する時 LikePost() } default: break } //replyからじゃない case false: param["tweet_type"] = Const.TWEET_TYPE.TWEET if let isMyLike = self.like_id { param["id"] = isMyLike } switch self.isPressed{ case true: //likeがおされてて、それを消す場合の処理 LikeDelete() case false: if DislikeButton.sharedInstance.isPressed == true{ //dislikeが押されてて、それを消して、likeを登録する時 DislikeButton.sharedInstance.DislikeDelete() LikePost() }else{ //何も押されてなくて、likeを登録する時 LikePost() } default: break } default: break } // ボタン切り替え、ここでisPressedが変わることに注意! togglePressed() // アニメーション self.doBounceAnimation() } } func LikePost(){ } func LikeDelete(){ } }

##DislikeButton.swift
LikeButton.swift

とlike,dislikeが入れ替わっているだけです。

import UIKit class DislikeButton: UIButton { var dislike_id:String! var row:Int! var isReply:Bool = false let defaultImage: UIImage = UIImage(named: "down_arrow")! var isPressed:Bool = false struct Singleton { static let sharedInstance = DislikeButton() } class var sharedInstance: DislikeButton { return Singleton.sharedInstance } override func awakeFromNib() { self.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) } func togglePressed() { //dislikeボタンを押された時に、dislikeボタンはすでに自分で押されてたとき if isPressed == true { self.selected = false isPressed = false self.setImage(UIImage(named: "down_arrow"), forState: .Normal) //dislikeボタンがすでに押されてなかった時 }else{ //likeボタンが押されてたとき if LikeButton.sharedInstance.isPressed == true { //likeボタンを解除して LikeButton.sharedInstance.isPressed = false LikeButton.sharedInstance.selected = false //likeボタンを黒に戻す行 LikeButton.sharedInstance.setImage(UIImage(named: "up_arrow"), forState: .Normal) isPressed = true self.selected = true self.setImage(UIImage(named: "down_p_arrow"), forState: .Normal) //dislikeボタンが押されてなかった時(何も押されてなかった時) }else{ isPressed = true self.selected = true self.setImage(UIImage(named: "down_p_arrow"), forState: .Normal) } } } func buttonClicked(sender:UIButton) { if sender == self { println(self.isPressed) let cell = sender.superview?.superview as! TweetTableViewCell! var param = [String:String]() switch cell.dislikeBt.isReply{ //replyから case true: param["tweet_type"] = Const.TWEET_TYPE.REPLY if let isMyDislike = self.dislike_id { param["id"] = isMyDislike }//is my likeがあったらそれをパラメーターにする switch self.isPressed{ case true: //dislikeがおされてて、それを消す場合の処理 DislikeDelete() case false: if LikeButton.sharedInstance.isPressed == true{ //likeが押されてて、それを消して、dislikeを登録する時 LikeButton.sharedInstance.LikeDelete() DislikePost() }else{ //何も押されてなくて、dislikeを登録する時 DislikePost() } default: break } //replyからじゃない case false: println("not from reply") param["tweet_type"] = Const.TWEET_TYPE.TWEET if let isMyDislike = self.dislike_id { param["id"] = isMyDislike } switch self.isPressed{ case true: //dislikeがおされてて、それを消す場合の処理 DislikeDelete() case false: if LikeButton.sharedInstance.isPressed == true{ //likeが押されてて、それを消して、dislikeを登録する時 LikeButton.sharedInstance.LikeDelete() DislikePost() }else{ //何も押されてなくて、dislikeを登録する時 DislikePost() } default: break } default: break } // ボタン切り替え togglePressed() // アニメーション self.doBounceAnimation() } } func DislikePost(){ } func DislikeDelete(){ } }

###補足情報(言語/FW/ツール等のバージョンなど)
xcode.6.3.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

2つ一組のボタンなので、UIViewまたはUIControlのサブクラスを作って、そこにボタンを2つ描いてください。

投稿2016/01/19 08:42

Stripe

総合スコア2183

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

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

ke-ki

2016/01/19 08:49

有難うございます。やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問