【Swift】alertControllerに3つ以上のalertActionを実装してみた

解説

Alertは画面上に表示される警告表示。

f:id:nekokichi_yos2:20181203202342p:plain

 

一般的なアプリでは、AlertActionの数は

  • 2個
  • 3個

がほとんど。

 

しかし、もしAlertActionの数を2,3,4…と増やしていったらどうなるのか?

 

実験結果

 

※4個

f:id:nekokichi_yos2:20181203202412p:plain

 

※12個

f:id:nekokichi_yos2:20181203202429p:plain

 

※15個

f:id:nekokichi_yos2:20181203202450p:plain

 

13,4個以降は、スクロールできる以外変化なし。

 

 

ソースコード

 

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func alertButton(_ sender: Any) {
        alert()
    }
    
    func alert() {
        let alertController = UIAlertController(title: "アラートです", message: "どれか選択しろ", preferredStyle: .alert)
        let alertAction1 = UIAlertAction(title: "1", style: .default, handler: nil)
        let alertAction2 = UIAlertAction(title: "2", style: .default, handler: nil)
        let alertAction3 = UIAlertAction(title: "3", style: .default, handler: nil)
        let alertAction4 = UIAlertAction(title: "4", style: .default, handler: nil)
        let alertAction5 = UIAlertAction(title: "1", style: .default, handler: nil)
        let alertAction6 = UIAlertAction(title: "2", style: .default, handler: nil)
        let alertAction7 = UIAlertAction(title: "3", style: .default, handler: nil)
        let alertAction8 = UIAlertAction(title: "4", style: .default, handler: nil)
        let alertAction9 = UIAlertAction(title: "1", style: .default, handler: nil)
        let alertAction10 = UIAlertAction(title: "2", style: .default, handler: nil)
        let alertAction11 = UIAlertAction(title: "3", style: .default, handler: nil)
        let alertAction12 = UIAlertAction(title: "4", style: .default, handler: nil)
        let alertAction13 = UIAlertAction(title: "2", style: .default, handler: nil)
        let alertAction14 = UIAlertAction(title: "3", style: .default, handler: nil)
        let alertAction15 = UIAlertAction(title: "4", style: .default, handler: nil)
        alertController.addAction(alertAction1)
        alertController.addAction(alertAction2)
        alertController.addAction(alertAction3)
        alertController.addAction(alertAction4)
        alertController.addAction(alertAction5)
        alertController.addAction(alertAction6)
        alertController.addAction(alertAction7)
        alertController.addAction(alertAction8)
        alertController.addAction(alertAction9)
        alertController.addAction(alertAction10)
        alertController.addAction(alertAction11)
        alertController.addAction(alertAction12)
        alertController.addAction(alertAction13)
        alertController.addAction(alertAction14)
        alertController.addAction(alertAction15)
    }

}

 

【Xcode】シミュレータの黒い枠を消す

解説

 

Xcodeでシミュレータを起動すると、下記の邪魔な枠が表示される。

f:id:nekokichi_yos2:20181203202119p:plain

 

無駄にスペースを取るので、Macbookやノートパソコンの画面が圧迫してしまう。

 

できれば、下記のようにコンパクトな画面にしたい。

f:id:nekokichi_yos2:20181203202109p:plain

 

方法は、Simulator > Window > Show Device Bezels、のチェックを外すだけ。

 

もし戻したい場合は、チェックをつけるだけ。

 

【Swift】セルの選択状態(タップ時の色)を解除する

解説

 

TableViewのCellをタップすると、そのCell全体が灰色に染まってしまう。

f:id:nekokichi_yos2:20181203201926p:plain

 

しかも、他のCellをタップしない限り、元の白色に戻ることはない。

 

タップ時の変化自体を削除することも可能だが、タップしても何も変化が起こらないと、ユーザーにとってはどのCellをタップしたのかがわからない。

 

できれば、

 

Cellをタップ

Cellが灰色に

処理実行

Cellが白色に

 

という流れを実装したい。

 

そこで役立つのが、deselectRow()、だ。

 

これを使えば、Cellのタップ時、Cellの色がスーッと白色に戻る。

 

ソースコード

 

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource
{
    
    @IBOutlet weak var tableView: UITableView!
    
    var array = [String]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if let a = UserDefaults.standard.array(forKey: "配列") as? [String] {
            array = UserDefaults.standard.array(forKey: "配列") as! [String]
            tableView.reloadData()
        }
    }
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return array.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = array[indexPath.row]
        return cell
    }
    
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let DC = self.storyboard?.instantiateViewController(withIdentifier: "detail") as! DetailController
        DC.indexNum = indexPath.row
        DC.label = array[indexPath.row]
        self.navigationController?.pushViewController(DC, animated: true)
        tableView.deselectRow(at: indexPath, animated: true)
    }
    
    @IBAction func addButton(_ sender: Any) {
        performSegue(withIdentifier: "Add", sender: nil)
    }
    
}

 

 

【Swift】TableViewのdetailTextLabelとaccessoryType

完成図

 

f:id:nekokichi_yos2:20181112004010p:plain

 

ソースコード

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    
    @IBOutlet weak var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.delegate = self
        tableView.dataSource = self
    }
    
    //セクションの数
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 4
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        var cell = UITableViewCell()
        
        switch indexPath.row {
        case 0:
            //detailTextLabelが表示されない
            cell = UITableViewCell(style: .default, reuseIdentifier: "cell1")
            //右向き矢印
            cell.accessoryType = .disclosureIndicator
        case 1:
            //detailTextLabelが右側に
            cell = UITableViewCell(style: .value1, reuseIdentifier: "cell1")
            //右向き矢印+詳細ボタん
            cell.accessoryType = .detailDisclosureButton
        case 2:
            //textLabelが左に青く、detailTextLabelが中央に
            cell = UITableViewCell(style: .value2, reuseIdentifier: "cell1")
            //詳細ボタン
            cell.accessoryType = .detailButton
        case 3:
            //textLabelを上に、detailTextLabelを下に
            cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell1")
            //チェックマーク
            cell.accessoryType = .checkmark
        default:
            break
        }
        
        //textLabelにテキストを代入
        cell.textLabel?.text = "text"
        //detailTextLabelにテキストを代入
        cell.detailTextLabel?.text = "detail\(indexPath.row)"
        
        return cell
    }

}

 

【Swift】TableViewのHeaderSectionとFooterSection

完成図

 

f:id:nekokichi_yos2:20181112003503p:plain

 

ソースコード

 

 

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    
    @IBOutlet weak var tableView: UITableView!
    
    //セルに表示するテキスト
    var text  = ["fafeaw","faefa","gwafawfew"]
    //セクションに表示するテキスト
    var sectiontext = ["1","2","3","4"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.delegate = self
        tableView.dataSource = self
    }
    
    //セクションの数
    func numberOfSections(in tableView: UITableView) -> Int {
        return 3
    }
    
    //ヘッダーセクションのタイトル
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return sectiontext[section]
    }
    
    //ヘッダーセクションの高さ
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 60
    }
    
    //フッターセクションのタイトル
    func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? {
        return "終わり"
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return text.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        
        cell1.textLabel?.text 
        
        return cell
    }

}

 

【Swift】UITextViewが持つ2つのプロパティ

Editable :編集可能/不可能

Selectable:選択可能/不可能

 

 

Editable:Selectable = true:true

f:id:nekokichi_yos2:20181112002904p:plain

 

Editable:Selectable = false:false

f:id:nekokichi_yos2:20181112002909p:plain

 

Editable:Selectable = false:true

f:id:nekokichi_yos2:20181112002912p:plain