Saya memiliki subkelas yang sangat sederhana dari UITextView yang menambahkan fungsionalitas "Placeholder" yang dapat Anda temukan asli pada objek Bidang Teks. Ini kode saya untuk subclass:
import UIKit
import Foundation
@IBDesignable class PlaceholderTextView: UITextView, UITextViewDelegate
{
@IBInspectable var placeholder: String = "" {
didSet {
setPlaceholderText()
}
}
private let placeholderColor: UIColor = UIColor.lightGrayColor()
private var textColorCache: UIColor!
override init(frame: CGRect) {
super.init(frame: frame)
self.delegate = self
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.delegate = self
}
func textViewDidBeginEditing(textView: UITextView) {
if textView.text == placeholder {
textView.text = ""
textView.textColor = textColorCache
}
}
func textViewDidEndEditing(textView: UITextView) {
if textView.text == "" && placeholder != "" {
setPlaceholderText()
}
}
func setPlaceholderText() {
if placeholder != "" {
if textColorCache == nil { textColorCache = self.textColor }
self.textColor = placeholderColor
self.text = placeholder
}
}
}
Setelah mengubah kelas untuk UITextView
objek di Inspektur Identitas PlaceholderTextView
, saya dapat mengatur Placeholder
properti baik-baik saja di Inspektur Atribut. Kode berfungsi dengan baik saat menjalankan aplikasi, tetapi tidak menampilkan teks placeholder di pembangun antarmuka. Saya juga mendapatkan kesalahan non-pemblokiran berikut (saya berasumsi inilah sebabnya tidak dirender pada waktu desain):
kesalahan: IB Designables: Gagal memperbarui status tata letak otomatis: Antarmuka Alat Pembuat Cocoa Touch jatuh
kesalahan: IB Designables: Gagal merender instance PlaceholderTextView: Merender tampilan membutuhkan waktu lebih dari 200 ms. Kode gambar Anda mungkin mengalami kinerja yang lambat.
Saya tidak dapat menemukan apa yang menyebabkan kesalahan ini. Kesalahan kedua tidak masuk akal, karena saya bahkan tidak mengungguli drawRect (). Ada ide?
sumber
Jawaban:
Ada laporan kerusakan yang dihasilkan saat Alat Pembuat Cocoa Touch Antarmuka macet. Tesis ini terletak di
~/Library/Logs/DiagnosticReports
dan dinamaiIBDesignablesAgentCocoaTouch_*.crash
. Dalam kasus saya, mereka berisi tumpukan-jejak berguna yang mengidentifikasi masalah dalam kode saya.sumber
initFrame(frame: CGRect)
harus didefinisikan. Lakukan jika Anda memberikaninit
metode sendiri .init(frame: CGRect)
secara eksplisit karena saya punyaini
metode khusus . Anda mungkin ingin melihat laporan kerusakanuse of unimplemented initializer 'init(frame:)'
langsungApplication Specific Information
di bawah dalam laporan. Terima kasih kawan! Gandakan menang dalam jawaban ini!Saya memiliki masalah yang sama beberapa kali. Kedua kali itu dimulai ketika saya memuat nib IBDesignable ke storyboard ketika nib tidak dapat masuk pada tampilan (yaitu saya memiliki tombol dari UIView tetapi masih di nib). Setelah saya memperbaiki Xcode itu masih memberi saya kesalahan jadi saya me-restart Xcode sampai secara acak berhenti memberi saya kesalahan.
Saya harap ini membantu.
UPDATE: Saya baru saja membunuh semua proses yang bernama "Interface Builder Cocoa Touch Tool", restart Xcode dan kesalahan hilang. Tidak tahu apakah ini akan selalu berhasil atau tidak.
sumber
init
metode apa pun , kode yang diposting sebagai bagian dari pertanyaan tidak lagi menunjukkanIB Designables
kesalahan dan placeholder ditampilkan dengan benar di Interface Builder.Dalam kasus saya, saya melakukan yang berikutnya dalam metode initWithFrame / initWithCoder untuk membuat tampilan:
Sepertinya saya tidak seharusnya menggunakan Bundel Utama , tetapi sebaliknya bundel kelas. Jadi saya mengganti kode itu untuk yang berikut dan berhasil:
Saya pikir mungkin ini bisa membantu seseorang.
sumber
let bundle = Bundle(for: ValidatingTextField.self)
dalam bahasa SwiftAnda bisa memilih tampilan kustom Anda di Interface Builder dan penggunaan kemudian
Editor
,Debug Selected Views
. Ini akan meluncurkan apa yang disebutIBDesignableAgentCocoaTouch
sesi debug ketika semua breakpoints (termasuk breakpoints pengecualian) bekerja dan Anda bisa mengidentifikasi secara tepat tempat crash view Anda.sumber
Untuk Xcode 8 - Swift
Menambahkan nilai opsional sebagai nilai default pada
@IBInspectable
penyebab masalah bagi saya.Ini tidak akan berfungsi:
Ini seharusnya bekerja:
sumber
Saya mengalami masalah Interface Builder yang sama yang menghasilkan desain.
Menggunakan teknik yang disarankan dalam jawaban ini saya bisa melacak masalah dengan penggunaan literal gambar.
Rendering macet
Tidak ada rendering mogok
sumber
Sebenarnya jika Anda memiliki beberapa atribut yang ditetapkan pengguna lama (yang tidak berlaku untuk tampilan saat ini) di tampilan apa pun di storyboard Anda, yang dapat menyebabkan agen Anda mogok.
Selain itu, kadang-kadang itu terjadi hanya karena bug Xcode yang tidak menyenangkan. Untuk memeriksanya, ketika Anda berada di storyboard hapus centang Editor> Secara Otomatis Refresh Tampilan, kemudian pindah ke file lain, bersihkan dan mulai ulang proyek Anda. Setelah memasukkan papan cerita lagi, Anda dapat mengklik Editor> Segarkan Tampilan dan periksa satu lagi otomatis. Yang itu juga memecahkan masalah saya sekali.
Jika keduanya tidak berhasil, maka mungkin Anda telah melakukan kesalahan tentang tampilan IBDesignable Anda, jadi pilih tampilan yang macet di storyboard dan debug dengan mengklik Editor> Debug Views
sumber
Ini tidak berlaku untuk pertanyaan ini, tetapi mungkin saya akan membantu orang lain.
Saya memiliki masalah yang sama ketika di kelas @IBDesignable saya, saya tidak mengimplementasikan keduanya:
sumber
Saya memiliki masalah yang sama dan saya menyelesaikannya dengan menambahkan 'use_frameworks!' ke Podfile proyek saya.
Semoga ini bisa membantu Anda.
sumber
Dalam kasus saya itu entah bagaimana terkait dengan kerangka carthage yang saya gunakan. Saya harus menambahkan $ (PROJECT_DIR) / Carthage / Build / iOS ke pengaturan build Runpath Search Paths
sumber
Dalam kasus saya, itu adalah masalah dengan OneSignal. Rupanya, mereka memiliki bug dalam versi 2.2.0 ke atas. Beralih ke 2.1.6 dan semuanya hebat lagi!
Lihat ini .
sumber
Ketika saya debug ini saya menemukan ada beberapa kelas yang memodifikasi UI. Biasanya marquelabel yang merupakan subclass dari UILabel atau kelas subclass lainnya dari UIView dan menggambar ui pada saat run time dan bertabrakan dengan mesin Autolayout. Coba berikan lebar atau tinggi tetap untuk tampilan khusus ini. Jika tidak menyelesaikan masalah Anda, coba solusi berikut: -
Solusi 1: - Batalkan komentar #use_frameworks di dalam file pod Anda.
Solusi 2: - Coba hapus data yang diturunkan. 1. Tutup jendela Editor pada Xcode Anda dan keluar dari simulator -> 2. Buka Preferensi Xcode -> Lokasi -> 3. Klik panah abu-abu kecil yang menunjukkan jalur data yang diturunkan -> 4. Pilih proyek Anda -> 5. Hapus semua folder di dalam -> 6. Keluar dari Xcode dan buka kembali
sumber
Tambahkan ke bagian bawah Podfile Anda dan jalankan
pod install
sumber
Tambahkan skrip ini di bagian akhir saya
Podfile
dan tampilpod install
lagi.sumber
Masalah utama adalah ketika Anda membuat @ IBDesignable, pastikan file cocoapod tidak termasuk dalam UITests atau hal itu akan menyebabkan kerusakan ini.
sumber
Saya menemukan alasannya adalah ukuran xib Anda tidak sama dengan desain di storyboard. Pastikan xib memiliki tinggi dan lebar yang sama.
sumber
Saya baru saja melewatkan baris kode ini
platform :ios, '7.0'
dan masalah terpecahkan. Hanya baris ini di file pod Anda dan perbarui masalah pod Anda akan teratasi.sumber
Bagi saya itu adalah sertifikat penandatanganan yang hilang, karena saya tidak pernah menjalankan aplikasi, jadi Xcode belum membuat sertifikat. Setelah saya menjalankan aplikasi,
IBDesignable
rendering bekerja dengan baik.sumber
Ini seperti jika Anda mendapat Kode dari Pengembang lain dan Anda mendapatkan kesalahan ini. Lari saja
Ini berhasil untuk saya. Semoga ini bisa membantu.
sumber
Pastikan Anda tidak langsung menginisialisasi
UIImage
atauUIFont
menggunakan aset atau font yang ditambahkan dalam proyek Anda.Saya selalu membuat
private func setUp()
di kelas@IBDesignable
khusus sayaUI
. yang disebut dariinit(frame: CGRect)
,init?(coder aDecoder: NSCoder)
. Jadi saya akhirnya memperbaruisetup()
sebagai berikut.sumber
Biarkan saja untuk membangun dan menjalankan di simulator jika Anda memiliki kesalahan di tempat lain dalam proyek hanya berkomentar dan jalankan yang dirancang terlebih dahulu untuk memperbarui yang dirancang dan menghapus tanda komentar pada kode lain. Ini bekerja untuk saya.
sumber