【Swift】ImageViewにタップアクションを追加
完成図
解説
ImageViewにButtonのようなタップアクションを追加するには、
- ImageViewのisUserIntaractionEnabledをtrueにする(StoryBoardからも変更可)
- ImageViewにUI部品のTapGestureRecognizerを追加
- TapGestureRecognizerを@IBActionで紐付け
- タップ時に実行したい処理を@IBAction内に記述
コードでTapGestureRecognizerを実装する方法もあるのだが、なぜか実装できない。
(viewDidLoad内に記述されているコード)
ソースコード
import UIKit class addTapGesture: UIViewController,UIGestureRecognizerDelegate { @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() // //tapGestureのインスタンス // let gesture = UIGestureRecognizer(target: self, action: #selector(addTapGesture.alert(_:))) // //tapGestureのデリゲート // gesture.delegate = self // //imageview全体にtapGestureを追加 // self.imageView.addGestureRecognizer(gesture) //ImageViewのタップ認識をONにする imageView.isUserInteractionEnabled = true } @IBAction func imageTapGesture(_ sender: Any) { //アラートで通知 let alert = UIAlertController(title: "TapGestureが作動しました", message: "タップされたよ", preferredStyle: .alert) let dismiss = UIAlertAction(title: "OK", style: .cancel, handler: nil) alert.addAction(dismiss) self.present(alert, animated: true, completion: nil) } }
【Swift】文字列をURLに変換し、たった1行で開く方法
完成図
解説
WebViewを経由することなくsafari経由でURLを開ける。
WebViewの場合は、
//URLを受け取る変数 let url = URL(string: url_word) let urlrequest = URLRequest(url: url!) webview.loadRequest(urlrequest)
と記述で実装できる。
どっちがオススメで利用されているかは不明。
また、http://やhttps://以外のURLはエラー回避のためにprefixを使用した。
ソースコード
import UIKit class openURLLink: UIViewController { override func viewDidLoad() { super.viewDidLoad() //リンク(文字列)先を開く openURL("http://www.google.co.jp/") } func openURL(_ link:String) { //linkが"http://","https://"のいずれかで始める文字列かを判断 //prefix(i):i文字目までの文字・・・prefix(3)は3文字目まで if link.prefix(7) == "http://" || link.prefix(8) == "https://" { //文字列をURLに変換 let url = URL(string: link)! //URLを開く if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) } } else {} } }
【Swift】NavigationBarに検索バーを設置
完成図
解説
検索バーを設置するには、ViewがNavagationControllerを継承している必要がある。
予め、Embed In で継承しておこう。
また、検索バーをSNSやクラウド共有アプリで使用する際、searchBar専用のメソッド(searchBarSearchButtonClickedなど)内でsearchBar.textを引数として、データを読み込むメソッドに組み込むのもアリ。
実際、pomu.meのサンプルを作った際に実装した。
ソースコード
import UIKit class addNavigationSearchBar: UIViewController,UISearchBarDelegate { //検索バーの宣言 var searchBar: UISearchBar! @IBOutlet weak var textLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() //NavigationBarに検索バーを設置 setSearchBar() } //検索バーの設置 func setSearchBar() { // NavigationBarにSearchBarをセット if let navigationBarFrame = self.navigationController?.navigationBar.bounds { //NavigationBarに適したサイズの検索バーを設置 let searchBar: UISearchBar = UISearchBar(frame: navigationBarFrame) //デリゲート searchBar.delegate = self //プレースホルダー searchBar.placeholder = "ユーザーを検索" //検索バーのスタイル searchBar.autocapitalizationType = UITextAutocapitalizationType.none //NavigationTitleが置かれる場所に検索バーを設置 navigationItem.titleView = searchBar //NavigationTitleのサイズを検索バーと同じにする navigationItem.titleView?.frame = searchBar.frame } } //検索バーで入力する時 func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { //キャンセルボタンを表示 searchBar.setShowsCancelButton(true, animated: true) return true } //検索バーのキャンセルがタップされた時 func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { //キャンセルボタンを非表示 searchBar.showsCancelButton = false //キーボードを閉じる searchBar.resignFirstResponder() } //検索バーでEnterが押された時 func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { //Labelに入力した値を設定 textLabel.text = searchBar.text as! String } }
【Swift】カスタムフォントを設定 - StoryBoard編
完成図
今回使用したカスタムフォントは、GoogleFontから入手
↓
解説
カスタムフォントの実装方法は、
- カスタムフォント(.ttf , .otf)を用意
- 左のフォルダに追加
- プロジェクトファイル → TARGETS → BuildPhases → CopyBundleResources の+からカスタムフォントを追加
- UI部品(Label,TextViewなど)のFontをCustomに、Familyをカスタムフォントに指定
ストーリーボード