意図しない画面遷移?
プログラム歴は長いですが、XCode初心者です。
開発環境はXCode8.1 Swift3を使用しています。
Storyboardになるべく依存しない環境を勉強し始めたところです。
2つのUIViewController(画面A,Bといいます)があって、それぞれに遷移ボタンを実装し、それが押されると、相手方の画面に遷移するという単純な処理で躓いています。
困っている問題は、2枚目の画面Bで、遷移ボタン以外の領域をクリックしても、反対の画面Aに遷移する点です。
解決しようと検索して下記のリンクを見つけて実行してみましたが、同じ問題が発生してしまいます。
http://docs.fabo.io/swift/uikit/015_uiviewcontroller.html
このコードですと、
画面A→Bで、partialCurl
画面B→Aで、FlipHorizontal
のエフェクトがかかるものと理解しています。ボタンを押したときはその通りの動作をします。
画面Bで、 ボタン以外の領域(なぜか画面上方の領域)をクリックすると、「partialCurlの逆」のエフェクトで画面Aに遷移しており、onClickMyButtonが呼び出されていないことまでは理解しているつもりです。
これは何が起きているのでしょうか?
// 追記です。
当方の手順ですが、
(1) File- New -ProjectでSingle View Applicationを作成
(2) SecondViewController.swiftを作成して、リンク先のコードをコピー。
(3) Swift3でエラーが消えるように修正したコードが以下の通りです。
(4) ViewController.swiftについても、リンク先のコードをコピーして、同じような修正を行いました。
コードの修正で何か間違いを犯していますでしょうか?
当方の環境では、シミュレータ上のiOSデバイス(iphone7など)で現象を確認しています。
import UIKit
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 背景色を設定.
self.view.backgroundColor = UIColor.blue
// ボタンを作成.
let backButton: UIButton = UIButton(frame: CGRect(x: 0,y: 0, width: 120, height: 50))
backButton.backgroundColor = UIColor.red
backButton.layer.masksToBounds = true
backButton.setTitle("Back", for: .normal)
backButton.layer.cornerRadius = 20.0
backButton.layer.position = CGPoint(x: self.view.bounds.width/2 , y:self.view.bounds.height-50)
backButton.addTarget(self, action: #selector(onClickMyButton(sender:)), for: .touchUpInside)
self.view.addSubview(backButton);
}
/*
ボタンイベント.
*/
internal func onClickMyButton(sender: UIButton){
// 遷移するViewを定義.
let myViewController: UIViewController = ViewController()
// アニメーションを設定.
myViewController.modalTransitionStyle = UIModalTransitionStyle.flipHorizontal
// Viewの移動.
self.present(myViewController, animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}