[Swift3] iOS 기기의 글꼴 목록 앱을 만듭니다.

11014 단어 iOSSwiftXcode8swift3
iOS의 앱을 개발하고 있고, iOS 기기에서 사용할 수 있는 폰트를 조사하고 싶은 것은, 자주 있다고 생각합니다. 넷 검색하면, 그러한 정보는 발견된다고 생각합니다만, 바삭바삭한 iOS 시뮬레이터나 실기로, 직접 폰트 일람을 취득하는 편이, 간단하겠지요. 일단, 폰트 일람을 하는 어플리(프로젝트)를 만들어 두면, 앞으로는 번거롭지 않습니다.
아래에 코드를 올려 놓습니다만, 간단하고 짧은 코드로 완성합니다. (Xcode 8.0에서 작성)
첫 페이지에서 글꼴 패밀리 목록이 표시되고 패밀리에 두 개 이상의 글꼴이 있는 패밀리는 탭하면 다음 페이지에 패밀리의 글꼴이 표시됩니다.



(1) 먼저 Xcode를 시작하여 Single View Application을 새로 만듭니다.
(2) 스토리 보드에서 ViewController를 선택하고 Editor 메뉴 Embed in> Navigation Controller에서 Navigation Controller를 추가합니다.
(3) ViewController에 UITableView를 붙여 넣습니다. Table View를 ViewController.swift의 IBOutlet tableView에 연결합니다.
Table View의 dataSourcedelegateViewController로 가정합니다. 그런 다음 UITableViewCell의 프로토 타입에 Cell라는 ID를 추가합니다.
(4) ViewController의 스토리 보드 ID를 Main Controller로 설정합니다.
(5) ViewController.swift를 다음과 같이 편집합니다.

ViewController.swift
import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    // フォントファミリー名。nilだと、先頭ページであることを示す。
    var familyName: String? = nil

    // 先頭ページでは、フォントファミリー名の配列。フォントファミリーのページでは、フォント名の配列。
    private var nameArray = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()

        // プロパティfamilyNameがnilだったら、nameArrayにフォントファミリー名の配列、そうでなかったら、ファミリーのフォントの配列を代入。
        if let familyName = familyName {
            nameArray = UIFont.fontNames(forFamilyName: familyName)
            // Navigation Barのタイトルをファミリー名にする。
            title = familyName
        } else {
            nameArray = UIFont.familyNames
            title = "Font families"
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // Table ViewのDataSource
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return nameArray.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

        let fontName = nameArray[indexPath.row]
        // ファミリー名、あるいはフォント名。
        cell.textLabel?.text = fontName
        // ファミリー内に2個以上のフォントがある場合、セルのアクセサリーをdisclosureにして、タップすると、次ページに遷移することを印象付ける。
        cell.textLabel?.font = UIFont(name: fontName, size: 17.0)
        if familyName == nil && UIFont.fontNames(forFamilyName: fontName).count > 1 {
            cell.accessoryType = .disclosureIndicator
        } else {
            cell.accessoryType = .none
        }

        return cell
    }

    // Table ViewのDelegate
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        // 先頭ページで、フォントが2個以上あるファミリーをタップした時だけ、ページを遷移する。
        guard let cell = tableView.cellForRow(at: indexPath),
        cell.accessoryType == .disclosureIndicator,
        familyName == nil else {
            return
        }

        // 遷移は、プログラム(pushViewController〜)で行う。
        if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Main Controller") as? ViewController {
            viewController.familyName = nameArray[indexPath.row]
            if let navigator = navigationController {
                navigator.pushViewController(viewController, animated: true)
            }
        }
    }

}

좋은 웹페이지 즐겨찾기