【Swift】ImageViewにタップアクションを追加

 

完成図

 

f:id:nekokichi_yos2:20181231000103p:plain

 

解説

 

ImageViewにButtonのようなタップアクションを追加するには、

  1. ImageViewのisUserIntaractionEnabledをtrueにする(StoryBoardからも変更可)
  2. ImageViewにUI部品のTapGestureRecognizerを追加
  3. TapGestureRecognizerを@IBActionで紐付け
  4. タップ時に実行したい処理を@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行で開く方法

 

完成図

 

f:id:nekokichi_yos2:20181230235419p:plain

 

解説

  

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に検索バーを設置

 

完成図

 

f:id:nekokichi_yos2:20181230234946p:plain

 

解説

 

検索バーを設置するには、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編

 

完成図

 

f:id:nekokichi_yos2:20181231000422p:plain

 

今回使用したカスタムフォントは、GoogleFontから入手

fonts.google.com

 

解説

 

カスタムフォントの実装方法は、

  1. カスタムフォント(.ttf , .otf)を用意
  2. 左のフォルダに追加
  3. プロジェクトファイル → TARGETS → BuildPhases → CopyBundleResources の+からカスタムフォントを追加
  4. UI部品(Label,TextViewなど)のFontをCustomに、Familyをカスタムフォントに指定

 

ストーリーボード

 

f:id:nekokichi_yos2:20181231000620p:plain

 

f:id:nekokichi_yos2:20181231000630p:plain