ฉันมีชุดรหัสต่อไปนี้:
CustomView.h
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface CustomView : UIView
@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;
@end
CustomView.m
#import "CustomView.h"
@implementation CustomView
- (void)setBorderColor:(UIColor *)borderColor {
_borderColor = borderColor;
self.layer.borderColor = borderColor.CGColor;
}
- (void)setBorderWidth:(CGFloat)borderWidth {
_borderWidth = borderWidth;
self.layer.borderWidth = borderWidth;
}
- (void)setCornerRadius:(CGFloat)cornerRadius {
_cornerRadius = cornerRadius;
self.layer.cornerRadius = cornerRadius;
}
@end
(สำหรับการอ้างอิง Swift ปัญหานี้ก็เกิดขึ้นกับรหัส Swift เช่นกัน)
CustomView.swift
@IBDesignable
class CustomView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@IBInspectable var borderColor : UIColor = UIColor.clearColor() {
didSet {
self.layer.borderColor = borderColor.CGColor
}
}
@IBInspectable var borderWidth : CGFloat = 0.0 {
didSet {
self.layer.borderWidth = borderWidth
}
}
@IBInspectable var cornerRadius : CGFloat = 0.0 {
didSet {
self.layer.cornerRadius = cornerRadius
}
}
}
ฉันเพิ่มไปยังตัวควบคุมมุมมองบนกระดานเรื่องราวและกำหนดประเภทรองในการUIView
CustomView
ซึ่งจะเพิ่มแถว "Designables" ติดอยู่ที่ "กำลังอัปเดต" และคำแนะนำเครื่องมือระบุว่า "กำลังรอให้เป้าหมายสร้าง" มันไม่เคยเปลี่ยนไปจากสถานะนี้
เมื่อฉันย้ายไปที่การตรวจสอบแอตทริบิวต์ฉันสามารถตั้งค่าIBInspectable
คุณสมบัติเหล่านี้ได้:
และเมื่อตั้งค่าแล้วจะปรากฏใน "User Defined Runtime Attributes":
อย่างไรก็ตามสถานะ "Designables" จะไม่ก้าวไปไกลกว่า "การอัปเดต" โดยยังคงเป็นคำแนะนำเครื่องมือเดิม (ฉันได้ลองสร้าง Cmd + B หลายครั้งแล้วไม่มีอะไรเปลี่ยนแปลง)
ยิ่งไปกว่านั้นเมื่อฉันตั้งค่าIBInspectable
คุณสมบัติฉันได้รับคำเตือนสำหรับแต่ละคุณสมบัติ:
IBDesignables - ละเว้นแอ็ตทริบิวต์รันไทม์ที่ผู้ใช้กำหนดสำหรับพา ธ คีย์ "borderColor" บนอินสแตนซ์ของ "UIView" ... คลาสนี้ไม่สอดคล้องกับการเข้ารหัสคีย์ - ค่าสำหรับ borderColor คีย์
ภาพหน้าจอของคำเตือนที่สร้างขึ้น:
ฉันคุ้นเคยกับปัญหาที่สอดคล้องกับการเข้ารหัสคีย์ - ค่าและโดยทั่วไปแล้วจะรู้วิธีแก้ไข ... แต่ฉันไม่เข้าใจวิธีแก้ปัญหานี้ที่นี่ ตามตัวตรวจสอบข้อมูลประจำตัวของข้อมูลพร็อพเพอร์ตี้มุมมองดังกล่าวเป็น "CustomView" (ไม่ใช่ "UIView" ปกติซึ่งไม่มีคุณสมบัติเหล่านี้) และถ้ามุมมองนั้นไม่ใช่ "CustomView" คุณสมบัติที่ออกแบบได้เหล่านี้จะไม่ปรากฏใน Attributes Inspector ใช่ไหม? แต่เมื่อเครื่องมือสร้างอินเทอร์เฟซพยายามใช้แอตทริบิวต์เหล่านี้กับมุมมองมันจะกลับไปคิดว่าคลาสของมุมมองคือ "UIView" และไม่สามารถใช้แอตทริบิวต์ได้
ความช่วยเหลือใด ๆ โปรดแจ้งให้ฉันทราบหากฉันได้ทิ้งรายละเอียดที่สำคัญไปแล้ว แต่สำหรับสิ่งที่คุ้มค่าฉันทำตามบทช่วยสอนนี้ (นอกเหนือจาก ObjC vs Swift) นอกจากนี้ยังเป็นที่น่าสังเกตว่าฉันทำตามบทช่วยสอนนี้ในเครื่องอื่นและทำงานได้อย่างมีเสน่ห์ (ฉันตั้งใจจะโพสต์นี้เมื่อคืนนี้ แต่คอมพิวเตอร์ที่ฉันใช้อยู่นั้นไม่มีปัญหานี้)
จากความคิดเห็นมีการแนะนำว่าอาจไม่มี.m
ไฟล์รวมอยู่ด้วยและนั่นอาจเป็นสาเหตุของปัญหา ฉันคิดว่าฉันคงออกนอกลู่นอกทางแน่ ๆ เพราะสถานการณ์นี้จะเป็นเช่นนั้น แต่ฉันก็ตรวจสอบอยู่ดี
เมื่อฉันเริ่มพยายามทำสิ่งนี้ครั้งแรกฉันเข้าใจว่าIB_DESIGNABLE
ชั้นเรียนจะต้องเป็นส่วนหนึ่งของUIKit
กรอบที่แตกต่างออกไป ดังนั้นจากภาพหน้าจอแรกนี้คุณจะเห็นว่าฉันตั้งค่าเฟรมเวิร์ก "CustomViews" ซึ่งมีคลาสCustomView
เดียว คุณจะเห็นที่นี่ว่าฉันสร้าง a OtherView
ซึ่งเหมือนกันCustomView
ด้วยยกเว้นไม่ได้อยู่ในกรอบงานแยก อย่างไรก็ตามปัญหาที่เหมือนกันยังคงอยู่บนกระดานเรื่องราวระหว่างทั้งสองคลาส
ที่นี่เรามีภาพหน้าจอที่ระบุว่าCustomView.m
รวมอยู่ในCustomViews
กรอบ:
ในขณะเดียวกันภาพหน้าจอต่อไปนี้ระบุหลายสิ่ง:
CustomViews.framework
รวมอยู่ในโครงการหลักอย่างเหมาะสมOtherView.m
รวมอยู่ในแหล่งคอมไพล์ด้วยดังนั้นแม้ว่าจะมีบางอย่างผิดปกติCustomView
แต่OtherView
ก็ควรใช้งานได้ แต่ก็สร้างข้อผิดพลาดเหมือนกันMain.storyboard
และLaunchScreen.xib
แสดงเป็นสีแดง ฉันไม่รู้ว่าทำไมและไม่ได้เบาะแสเล็กน้อยว่าทำไมถึงLaunchScreen.xib
ควร (ฉันยังไม่ได้แตะไฟล์นี้) แม้ว่าฉันจะพูดได้หลังจากดูโครงการอื่น ๆ แล้วMain.storyboard
ก็ยังแสดงเป็นสีแดงสำหรับโครงการเหล่านั้นและฉันก็ ไม่ได้ทำอะไรด้วยIB_DESIGNABLE
หรือที่IBInspectable
นั่น
ฉันได้ลองและลองใหม่หลายครั้งแล้ว ใช้งานได้ทุกครั้งบนคอมพิวเตอร์ที่บ้าน - ฉันไม่สามารถทำซ้ำปัญหาที่อธิบายไว้ในคำถามนี้ที่บ้านได้ ที่ทำงานมันไม่เคยได้ผล ปัญหาที่อธิบายไว้ในคำถามนี้เกิดขึ้นทุกครั้ง
คอมพิวเตอร์ทั้งสองเครื่องเป็น Mac Minis ที่ซื้อใหม่ในปีนี้ (ไม่ใช่รุ่นใหม่รุ่นปลายปี 2012) คอมพิวเตอร์ทั้งสองเครื่องใช้ OS X Yosemite 10.10 คอมพิวเตอร์ทั้งสองเครื่องกำลังเรียกใช้ Xcode เวอร์ชัน 6.1 ที่บ้านสร้างคือ (6A1052d) เช้านี้ฉันสามารถยืนยันได้ว่าคอมพิวเตอร์ทั้งสองเครื่องใช้งาน Xcode รุ่นเดียวกัน
มีคนอื่นแนะนำกับฉันว่ามันอาจจะเป็นแรมที่ไม่ดี ดูเหมือนจะเป็นเรื่องไกลตัวสำหรับฉัน ฉันได้รีสตาร์ทโครงการหลายครั้งรีสตาร์ทคอมพิวเตอร์หลายครั้ง ดูเหมือนว่าฉันจะมี RAM ที่ไม่ดีในคอมพิวเตอร์ที่มีอายุประมาณ 6 เดือนซึ่งฉันจะพบปัญหาอื่น ๆ และปัญหานี้จะไม่ค่อยสอดคล้องกัน แต่ปัญหานี้ยังคงมีอยู่แม้ว่าจะรีสตาร์ทโปรเจ็กต์ทั้งหมดหลายครั้งตั้งแต่เริ่มต้นและรีสตาร์ทอย่างสมบูรณ์บนคอมพิวเตอร์
ควรสังเกตว่าถ้าฉันรวบรวมและเรียกใช้โปรเจ็กต์นี้IBInspectable
จริงมุมมองแบบกำหนดเองพร้อมคุณสมบัติจะแสดงตามที่ฉันคาดหวังว่าสตอรีบอร์ดจะแสดง ฉันคิดว่าจะเป็นเช่นนั้นแม้ว่าจะไม่มีคำสั่งIB_DESIGNABLE
และIBInspectable
คำสั่งก็ตามเนื่องจากสิ่งเหล่านี้ถูกสร้างขึ้นเป็นแอตทริบิวต์รันไทม์ที่กำหนดโดยผู้ใช้