Articles

Vlastní podtřída UIView ze souboru xib

Vlastní pohledy s výstupy & akcí

Takže správný způsob načítání vlastních pohledů ze souborů xib vypadá asi takto:

Vnitř objektu vlastního pohledu instancujete soubor xib přesně stejným způsobem, jak jsem vám řekl přímo zde. 👆 Jediný rozdíl je v tom, že nemusíte používat pole objektů vrácených metodami, ale musíte připojit své objekty zobrazení prostřednictvím sestavovače rozhraní, přičemž jako referenční bod použijete Vlastníka souboru a navíc výstup vlastního kontejnerového zobrazení, který bude obsahovat vše, co potřebujete. 🤨

// note: view object is from my previous tutorial, with autoresizing masks disabledclass CustomView: View { // this is going to be our container object @IBOutlet weak var containerView: UIView! // other usual outlets @IBOutlet weak var textLabel: UILabel! override func initialize() { super.initialize() // first: load the view hierarchy to get proper outlets let name = String(describing: type(of: self)) let nib = UINib(nibName: name, bundle: .main) nib.instantiate(withOwner: self, options: nil) // next: append the container to our view self.addSubview(self.containerView) self.containerView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate() }}

Takže metoda inicializace zde pouze načítá soubor nib s vlastníkem self. Po dokončení procesu načítání budou vaše ukazatele výstupů naplněny správnými hodnotami ze souboru xib. Je tu ještě poslední věc, kterou musíme udělat. I pohledy ze souboru xib jsou „programově“ připojeny k našemu vlastnímu objektu pohledu, ale vizuálně tomu tak není. Musíme tedy do hierarchie pohledů přidat náš kontejnerový pohled. 🤐

Pokud chcete použít svůj vlastní objekt pohledu, stačí z něj vytvořit novou instanci – uvnitř řadiče pohledu – a nakonec ho klidně přidat jako podřízený pohled!“

Jedno slovo o hranicích, rámečcích alias pružinách a strutech: f*ckng UGLY! To jsou dvě slova. Jsou považovány za špatný postup, takže prosím používejte automatické rozvržení, o kotvách mám pěkný tutoriál, jsou úžasné a naučit se je zabere asi 15 minut. 😅

class ViewController: UIViewController { weak var customView: CustomView! override func loadView() { super.loadView() let customView = CustomView() self.view.addSubview(customView) NSLayoutConstraint.activate() self.customView = customView } override func viewDidLoad() { super.viewDidLoad() self.customView.textLabel.text = "Lorem ipsum" }}

To je vše, nyní máte zcela funkční vlastní objekt UIView, který načte soubor xib, aby mohl používat jeho obsah. Nebylo to tak špatné, že? 🤪

Ještě jedna věc navíc. Pokud neradi zpracováváte pohledy programově nebo se prostě nechcete trápit s metodou loadView, prostě ji úplně odstraňte. Dále vložte klíčové slovo @IBOutlet přímo před vlastní proměnnou třídy view. Otevřete storyboard pomocí IB, pak přetáhněte & drop nový prvek UIView do kontroléru a připojte vlastní view outlet. Mělo by to fungovat jako kouzlo. 💫

V nadpisu této části jsem slíbil outlety a akce, takže si povíme něco o IBAkcích. Fungují přesně tak, jak byste je očekávali u ovladačů. Můžete jednoduše připojit tlačítko k vlastnímu pohledu a delegovat akci na třídu vlastního pohledu. Pokud chcete předávat doteky nebo konkrétní akce kontroléru, měli byste použít vzor delegování nebo zvolit jednoduchý blok. 😎