2016-10-31 2 views
-1

내보기 컨트롤러에 UIView가 있습니다. 그리고 나는 스크린에서 몇몇 라벨을 프로그래밍 방식으로 그려야한다. 그래서 나는 그것과 그 클래스에서 UIView 서브 클래스 수 있다고 생각.UIview 문제 서브 클래 싱

내 코드 :

import Foundation 
import UIKit 

class MainBottomView : UIView{ 

    required init?(coder aDecoder: NSCoder) { 
     super.init(frame: UIScreen.main.bounds); 

     generateLabel(CGRect(x: 5, y: 363, width: 310, height: 62),tekst: "") 
     return; 
    } 

    func generateLabel(_ fr: CGRect,tekst: String){ 

     let l = UILabel(frame: fr) 
     l.backgroundColor = UIColor(red: (21/255.0),green: (185/255.0),blue:(201/255.0),alpha:1) 
     l.textAlignment = NSTextAlignment.center 
     l.text = tekst 
     l.textColor = UIColor.white 
     l.font = UIFont(name: "HelveticaNeue", size: 23) 
     self.addSubview(l) 
    } 
} 

그러나 필요한 초기화에서 충돌? 행. 왜 이런 일이 일어나는지 모르겠습니다. 또는 잘못된 방식으로 서브 클래 싱을 사용 했습니까?

대단히 감사합니다!

답변

1

UIView가 storyboard/nib에서 오는 경우 init (코더)가 이니셜 라이저입니다. 그래서 코드가 필요합니다.

귀하의 init은 실제로 절대로 실행되지 않습니다. UIView에 지정된 두 초기화자는 init(frame:) (코드로 작성된 UIView의 경우) 및 init(coder:) (스토리 보드에서 작성된보기의 경우)입니다. 그것들은 당신이 오버라이드 (override) 할 필요가있는 것들입니다.

+0

보기 컨트롤러에서보기를 만들었습니다.보기에 MainBottomView 클래스를 지정했습니다. 그래서 init()을 init (코더 :)로 대체해야합니까? – da1lbi3

+0

그게 내가 말한 것 같아, 그렇지 않니? 그냥'fatalError'를 꺼내서'generateLabel'을 호출하십시오. (물론'super'를 호출하십시오.) – matt

+0

조금 다르게 구현했지만,이 방법이 더 좋을 것이라고 생각했습니다 (내 게시물 참조). 그러나 아직 작동하지 않습니다. – da1lbi3

1

당신의 Info.plist에서 삭제() 엑스 코드 8.1 (8B62)을 아래의 아이디어를 얻을 코드와 스토리 보드, launchscreen, 청소 속성 메인 스토리 보드 및 Launchscreen 주위를 재생하고 다음과 같은 내용으로 AppDelegate.swift를 대체 할 수

import UIKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
    var window: UIWindow? 
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     self.window = UIWindow(frame: UIScreen.main.bounds) 
     self.window!.rootViewController = ViewController() 
     self.window!.makeKeyAndVisible() 
     return true 
    } 
} 

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.view.addSubview(MainBottomView()) 
    } 
} 

class MainBottomView : UIView{ 
    required init?(coder: NSCoder) {super.init(coder: coder)} 
    init() { 
     super.init(frame: UIScreen.main.bounds); 
     generateLabel(CGRect(x: 5, y: 363, width: 310, height: 62),tekst: "test") 
    } 

    func generateLabel(_ fr: CGRect,tekst: String){ 

     let l = UILabel(frame: fr) 
     l.backgroundColor = UIColor(red: (21/255.0),green: (185/255.0),blue:(201/255.0),alpha:1) 
     l.textAlignment = NSTextAlignment.center 
     l.text = tekst 
     l.textColor = UIColor.white 
     l.font = UIFont(name: "HelveticaNeue", size: 23) 
     self.addSubview(l) 
    } 
}