All Articles

swift初心者が3時間でひとまず動かすまで

準備編

swift 4.2.1

☁  ~  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift -v
Apple Swift version 4.2.1 (swiftlang-1000.11.42 clang-1000.11.45.1)
Target: x86_64-apple-darwin17.7.0
/Applications/Xcode.app/Contents/Developer/usr/bin/lldb "--repl=-enable-objc-interop -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -color-diagnostics"
Welcome to Apple Swift version 4.2.1 (swiftlang-1000.11.42 clang-1000.11.45.1). Type :help for assistance.

XCODEをインストールから動作まで

  1. mac OS High Sierra 10.13.6
  2. app sotre > xcode > 入手
  3. Install additional required components > install
  4. Create a new Xcode project
  5. Tabbed App
  6. 左上の再生ボタンでシミュレーションが動かせる simulator

カスタマイズ編

左上にアカウントIDを表示(ひとまず定数)

# AppDelegate.swift
...
class GlobalVar {
    private init() {}
    static let shared = GlobalVar()
    
    // ADD
    var myAccount = "aaaaaaaaa"
}
# FirstViewController.swift
...
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let label = UILabel()
    label.text = myVar.myAccount
    label.font = UIFont(name: "HiraMinProN-W3", size: 20)
    label.frame.origin = CGPoint(x: 200, y: 100)
    label.sizeToFit() 
    label.center = self.view.center
    self.view.addSubview(label)
}

テーブルを追加(ひとまず定数)

override func viewDidLoad() {
...
    myTableView1 = UITableView(frame: self.view.frame, style: UITableView.Style.grouped) // ‥②
    myTableView1.delegate = self // ‥③
    myTableView1.dataSource = self // ‥③
    myTableView1.estimatedRowHeight = 100
    myTableView1.frame.origin = CGPoint(x: 0, y: 40)
    myTableView1.rowHeight = UITableView.automaticDimension
    self.view.addSubview(myTableView1)
}
//④セクション数を指定
func numberOfSections(in tableView: UITableView) -> Int {
    print("セクション数:1")
    return 1
}
//④セクションタイトルを指定
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return "ランキング"
}
//④セル数を指定
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    print("セル数:5")
    return 5
}
//④セルを生成
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    print("セルの値を入れていく")
    let cell = UITableViewCell(style: UITableViewCell.CellStyle.subtitle,
       reuseIdentifier: "aaa\(indexPath.section)-\(indexPath.row)")
    cell.textLabel?.text = textArry_title[indexPath.row]
    //cell.detailTextLabel?.text = "行番号 : \(indexPath.row)"
    //cell.detailTextLabel?.numberOfLines = 0
    cell.detailTextLabel?.text = textArry_desc[indexPath.row]
    cell.imageView?.image = UIImage(named: "dog2.png")
    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("第\(indexPath.section)セクションの\(indexPath.row)番セルが選択されました")
}

画面を追加する

  1. command + shift + L > View Controller
  2. File > New > File > Cocoa Touch Class > UIViewController を作成
  3. storyboardにおいて新しい画面の上部黄色丸をクリックする
  4. 右側windowのはてなの右にある四角をクリックして、Classで2で作った物を選択
  5. 同じ場所のStoryboard IDを適当なものに指定(今回はvote

add_view_controller

テーブルから画面遷移をして変数を渡す

  1. 画面間で渡すのはめんどくさいのでグローバル変数で定義しておく

    # AppDelegate.swift
    ...
    class GlobalVar {
        private init() {}
        static let shared = GlobalVar()
        
        // ADD
        var myAccount = "aaaaaaaaa"
        var voteId = ""
    }
  2. テーブルのセルをクリックした時に変数書き換えと画面遷移を行う

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print("第\(indexPath.section)セクションの\(indexPath.row)番セルが選択されました")
        
        //まずは、同じstororyboard内であることをここで定義します
        let storyboard: UIStoryboard = self.storyboard!
        //ここで移動先のstoryboardを選択(今回の場合は先ほどvoteと名付けたのでそれを書きます)
        let vote = storyboard.instantiateViewController(withIdentifier: "vote")
        //変数をここで書き換える
        myVar.voteId = textArry_title[indexPath.row]
        //ここが実際に移動するコードとなります
        self.present(vote, animated: true, completion: nil)
    }

    戻るボタンを実装する

self.dismiss(animated: true, completion: nil)

テーブルからの遷移内容によって表示を変える