IB_DESIGNABLE, IBInspectable - Trình tạo giao diện không cập nhật


91

Tôi có bộ mã sau:

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

(Đối với tham chiếu Swift, sự cố này cũng xảy ra với mã 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
        }
    }
}

Tôi đã thêm một UIViewbộ điều khiển chế độ xem trên bảng phân cảnh và đặt lớp con của nó thành CustomView.

nhập mô tả hình ảnh ở đây

Điều này thêm hàng "Thiết kế". Nó bị kẹt khi "Đang cập nhật" và chú giải công cụ cho biết "Đang chờ mục tiêu xây dựng". Nó không bao giờ thay đổi từ trạng thái này.

Khi tôi chuyển sang phần kiểm tra thuộc tính, tôi có thể đặt các IBInspectablethuộc tính sau:

nhập mô tả hình ảnh ở đây

Và sau khi được thiết lập, chúng cũng hiển thị trong "Thuộc tính thời gian chạy do người dùng xác định":

nhập mô tả hình ảnh ở đây

Tuy nhiên, trạng thái "Thiết kế" không bao giờ vượt quá "Đang cập nhật" với vẫn cùng chú giải công cụ (Tôi đã thử xây dựng Cmd + B vài lần, không có gì thay đổi).

Hơn nữa, khi tôi đặt các IBInspectablethuộc tính, tôi nhận được cảnh báo cho từng thuộc tính:

IBDesignables - Bỏ qua thuộc tính thời gian chạy do người dùng xác định cho đường dẫn khóa "borderColor" trên trường hợp "UIView" ... lớp này không tuân thủ mã hóa khóa-giá trị cho khóa borderColor.

Ảnh chụp màn hình các cảnh báo được tạo:

nhập mô tả hình ảnh ở đây


Tôi quen thuộc với các vấn đề tuân thủ mã khóa-giá trị và nói chung biết cách giải quyết chúng ... nhưng tôi không hiểu cách giải quyết vấn đề này ở đây. Theo trình kiểm tra danh tính của chế độ xem, chế độ xem là "CustomView" (không phải là "UIView" thông thường, không có các thuộc tính này). Và nếu chế độ xem không phải là "CustomView" thì các thuộc tính có thể chỉ định này sẽ không hiển thị trong Trình kiểm tra thuộc tính, phải không? Nhưng khi Trình tạo giao diện cố gắng áp dụng các thuộc tính này cho chế độ xem, nó sẽ quay lại nghĩ rằng lớp của chế độ xem là "UIView" và không thể áp dụng các thuộc tính.

Bất kỳ giúp đỡ? Vui lòng cho tôi biết nếu tôi đã bỏ sót một số chi tiết quan trọng, nhưng đối với những gì nó đáng giá, tôi đã làm theo hướng dẫn này chính xác (khác với ObjC vs Swift). Cũng cần lưu ý rằng tôi đã làm theo hướng dẫn này chính xác trên một máy khác và nó hoạt động như một cái duyên (Tôi định thực hiện bài đăng này vào đêm qua nhưng máy tính tôi đang sử dụng khi đó không gặp sự cố này).


Dựa trên các nhận xét, người ta cho rằng có lẽ .mtệp không được bao gồm và điều đó có thể gây ra sự cố. Tôi đã nghĩ chắc chắn mình sẽ hết cách để xảy ra trường hợp này, nhưng dù sao thì tôi cũng đã kiểm tra.

nhập mô tả hình ảnh ở đây

Khi lần đầu tiên tôi bắt đầu cố gắng làm điều này, tôi đã hiểu rằng các IB_DESIGNABLElớp học phải là một phần của một UIKitkhuôn khổ khác . Vì vậy, từ ảnh chụp màn hình đầu tiên này, bạn có thể thấy rằng tôi đã thiết lập một khung "CustomViews", có một lớp CustomView,. Bạn cũng sẽ thấy ở đây rằng tôi cũng đã tạo một OtherView, giống hệt với CustomView, ngoại trừ nó không nằm trong một khuôn khổ riêng biệt. Tuy nhiên, vấn đề giống hệt nhau vẫn tồn tại trên bảng phân cảnh giữa cả hai lớp.

Ở đây chúng tôi có một ảnh chụp màn hình cho biết nó CustomView.mđược bao gồm để xây dựng với CustomViewskhung:

nhập mô tả hình ảnh ở đây

Trong khi đó, ảnh chụp màn hình sau chỉ ra một số điều:

  • CustomViews.framework được đưa vào dự án chính một cách thích hợp.
  • OtherView.mcũng được bao gồm như một nguồn biên dịch, vì vậy ngay cả khi có vấn đề gì xảy ra CustomView, nó OtherViewsẽ hoạt động, tuy nhiên nó tạo ra các lỗi giống hệt nhau.
  • Main.storyboardLaunchScreen.xibđang hiển thị dưới dạng màu đỏ. Tôi không biết tại sao và không có manh mối nhỏ nhất về lý do tại sao LaunchScreen.xibnên (tôi chưa chạm vào tệp này), mặc dù tôi có thể nói sau khi xem xét các dự án khác, Main.storyboardcũng hiển thị màu đỏ cho các dự án đó, và tôi không làm bất cứ điều gì với IB_DESIGNABLEhoặc IBInspectableở đó.

nhập mô tả hình ảnh ở đây


Tôi đã thử và thử lại điều này vài lần. Nó hoạt động mọi lúc trên máy tính của tôi ở nhà - Tôi không thể tái tạo sự cố được mô tả trong câu hỏi này ở nhà. Tại nơi làm việc, nó không bao giờ hoạt động. Vấn đề được mô tả trong câu hỏi này xảy ra mọi lúc.

Cả hai máy tính đều là Mac Minis được mua mới trong năm nay (không phải mẫu mới, mẫu cuối năm 2012). Cả hai máy tính đang chạy OS X Yosemite 10.10. Cả hai máy tính đang chạy Xcode Phiên bản 6.1. Ở nhà, công trình là (6A1052d). Sáng nay, tôi có thể xác nhận rằng cả hai máy tính đang chạy các bản dựng Xcode giống hệt nhau.

Những người khác đã gợi ý với tôi rằng đó có thể là RAM kém. Điều đó có vẻ xa vời với tôi. Tôi đã khởi động lại dự án nhiều lần, khởi động lại máy tính nhiều lần. Đối với tôi, có vẻ như nếu có RAM kém trên một máy tính khoảng 6 tháng tuổi, thì tôi sẽ thấy các vấn đề khác và vấn đề này sẽ ít nhất quán hơn. Nhưng vấn đề chính xác này vẫn tồn tại mặc dù nhiều lần khởi động lại toàn bộ dự án từ đầu và khởi động lại hoàn toàn trên máy tính.


Cần lưu ý rằng nếu tôi thực sự biên dịch và chạy dự án này, chế độ xem tùy chỉnh với các IBInspectablethuộc tính thực sự hiển thị như tôi mong đợi bảng phân cảnh sẽ hiển thị nó. Tuy nhiên, tôi tưởng tượng rằng đây sẽ là trường hợp ngay cả khi không có lệnh IB_DESIGNABLEIBInspectable, vì chúng được tạo dưới dạng Thuộc tính thời gian chạy do người dùng xác định.


Chà, đó chỉ là một ý tưởng. Tôi đã xóa CustomView.m khỏi mục tiêu và sau đó nhận được cảnh báo tương tự khi chạy ứng dụng.
Martin R

Điều đó có vẻ giống như một gremlin thực sự khi bạn so sánh với một chiếc máy có vẻ giống hệt nhau (khác biệt ở chỗ). Bạn đã thử đăng lên devforums chưa? Có vẻ như bạn đang bay mù mịt mà không có thông tin bổ sung, và quá trình của bạn có vẻ hợp lý và hợp lý. Cảnh báo "xây dựng" có thể không có ý nghĩa quá nhiều vì Xcode có rất nhiều thông báo lỗi gây hiểu lầm. Mặc dù vậy, đối với các cú đá, bạn đã thử Editor -> "gỡ lỗi chế độ xem đã chọn", phải không? (Có thể sẽ không hoạt động, nhưng đáng để kiểm tra tỉnh táo). Ngoài ra, có gì hiển thị trong ứng dụng Console (ghi nhật ký) không?
Chris Conover

Tôi đang gặp vấn đề tương tự. Các mỏ có một tệp xib duy nhất chứa IB_DESIGNABLE. Tuy nhiên, khi kiểm tra thiết lập của mình, tôi đã bật tính năng tự động làm mới và hiện tôi đã thử làm mới thủ công, xóa dữ liệu dẫn xuất trước, v.v. Cho đến nay vẫn chưa có gì hoạt động. Điều kỳ lạ là tôi đã kiểm soát này hoạt động tốt, sau đó nó dừng lại. Và tôi không nghĩ rằng tôi đã thay đổi bất kỳ mã nào ở giữa. Khùng.
drekka,

Đã hiển thị cảnh báo như trên. Hiện đã tạo lớp thứ hai với mã được sao chép từ IB ban đầu có thể chỉ định. Lớp này hoạt động hoàn hảo và khi tôi chuyển trở lại lớp không làm việc ban đầu, bây giờ nó hoạt động tốt. Từ điều này, tôi kết luận rằng có một số bộ nhớ cache ở đâu đó (không phải trong dữ liệu có nguồn gốc) không được xóa cho đến khi ib gốc được chỉ định được hoán đổi cho một ib khác được chỉ định. Thay đổi thành UIView dường như không xóa bộ nhớ cache này. Chỉ có ib khác được chỉ định. Đi xem hình :-)
drekka

Câu trả lời:


75

Dựa trên đề xuất của chrisco để gỡ lỗi chế độ xem đã chọn (mà tôi đã thực hiện, nhưng đã thử lại để có kết quả tốt), tôi nhận thấy một vài tùy chọn khác ở cuối menu Trình chỉnh sửa.

  • Tự động làm mới chế độ xem
  • Làm mới tất cả các chế độ xem

Tôi nhấp vào "Làm mới tất cả các chế độ xem" và sau khi Xcode đã suy nghĩ một chút, đột nhiên bảng phân cảnh hiển thị chế độ xem của tôi như mong đợi (áp dụng đúng IBInspectablecác thuộc tính của tôi ).

nhập mô tả hình ảnh ở đây

Sau đó, tôi đã xem lại toàn bộ quy trình để xác nhận rằng đây là giải pháp.

Tôi đã tạo một lớp mới ThirdView,. Lớp này giống hệt với những lớp khác, một lần nữa. Tôi đã thay đổi lớp của chế độ xem của mình thành ThirdViewvà có một cái gì đó hơi khác lần này:

nhập mô tả hình ảnh ở đây

Nhấp vào "Hiển thị" cho tôi các cảnh báo:

nhập mô tả hình ảnh ở đây

Một cái mới lần này:

Sử dụng UIView lớp cho đối tượng có lớp tùy chỉnh vì lớp ThirdView không tồn tại.

Điều này thực sự không hữu ích hơn những gì đã tồn tại. Thêm vào đó, ba cảnh báo khác đã tăng gấp đôi thành 6 một cách kỳ lạ.

Dù sao, nếu tôi nhấp vào "Làm mới tất cả các chế độ xem" từ trình đơn thả xuống của Trình chỉnh sửa một lần nữa, tất cả các lỗi sẽ biến mất và một lần nữa, chế độ xem hiển thị đúng.

Tuy nhiên, cho đến thời điểm này, mọi thứ tôi làm là những thứ tôi chưa bao giờ làm rối tung ở nhà. Ở nhà, nó chỉ hoạt động. Vì vậy, tôi đã bật "Tự động làm mới chế độ xem" và tạo "Chế độ xem thứ tư" để kiểm tra - một lần nữa, giống với ba chế độ đầu tiên.

Sau khi thay đổi lớp của chế độ xem thành "Chế độ xem thứ tư", nhãn chỉ định cho biết "Đang cập nhật" trong một thời gian ngắn rồi cuối cùng nói "Cập nhật":

nhập mô tả hình ảnh ở đây

Vì vậy, tôi đã kiểm tra máy tính của mình ở nhà. "Tự động làm mới chế độ xem" được bật trên máy tính luôn hoạt động. Nó đã được tắt ở máy tính không được. Tôi không bao giờ nhớ đã chạm vào tùy chọn menu này. Tôi thậm chí không thể cho bạn biết chắc chắn liệu nó có tồn tại trước Xcode 6. Nhưng tùy chọn này là thứ tạo nên sự khác biệt.


TL; DR, nếu bạn đang gặp sự cố tương tự được mô tả trong câu hỏi, hãy đảm bảo rằng "Tự động làm mới chế độ xem" được bật (hoặc "Làm mới tất cả chế độ xem" theo cách thủ công khi bạn cần cập nhật trong IB):

nhập mô tả hình ảnh ở đây


2
Tôi thực sự đang tìm cách tắt nó đi vì nó liên tục hiển thị trong nền khiến những chiếc MacBook cũ thực sự chậm. Cảm ơn!
Khởi hành từ

Điều này có thể giải quyết tạm thời, nhưng hãy kiểm tra các câu trả lời từ @ Martin-Gilles Lavoie
Ashley Mills

22

Tôi có một số chi tiết khác có thể khiến các lớp IBDesignable của bạn không được tải.

Chọn bảng phân cảnh / xib có vấn đề của bạn nơi các chế độ xem tùy chỉnh của bạn phải hiển thị.

Trong khu vực điều hướng, đi tới Trình điều hướng Báo cáo trong không gian làm việc / dự án XCode của bạn.

Trong menu Trình chỉnh sửa của XCode, nhấn (như được đề cập bởi nhgrif), tùy chọn "Làm mới tất cả các chế độ xem". Điều này sẽ khiến IB khởi chạy một trình biên dịch cho cả đống thứ mà tôi chắc chắn rằng bạn sẽ không ngờ tới.

Trong Trình điều hướng Báo cáo, Nhấp vào "Theo Nhóm" để lọc nội dung và xem phần "Trình tạo Giao diện". Bạn sẽ thấy rằng vì lợi ích của việc tải khung xem IBDesignable tùy chỉnh, nó sẽ biên dịch RẤT NHIỀU thứ. Nếu bất kỳ mục tiêu nào trong số này KHÔNG biên dịch, chẳng hạn như mục tiêu thử nghiệm đơn vị (có thể không được dùng nữa) (ngay cả khi chúng hoàn toàn không liên quan đến mã tải các chế độ xem hoặc bảng phân cảnh này), thì IB sẽ không tải được dll của bạn.

Trong trường hợp của tôi, IB đã cố gắng biên dịch 8 mục tiêu, trong đó có 4 mục tiêu mà các bài kiểm tra đơn vị chưa được cập nhật kể từ các thay đổi tái cấu trúc gần đây mà chúng tôi đang thực hiện.

Hầu hết các thay đổi / sửa chữa mã mà tôi đã thực hiện để IB tải đúng cách và hiển thị các chế độ xem hải quan của tôi ở những nơi không liên quan hoặc thậm chí được liên kết với các lớp này, cũng như không bao giờ tải bảng phân cảnh trong quá trình chạy các bài kiểm tra đơn vị này. Tuy nhiên, IB có sự phụ thuộc vào toàn bộ không gian làm việc biên dịch để nó hoạt động.


Này, vậy làm cách nào để ngăn IB cố gắng tải và hiển thị các chế độ xem không liên quan hoặc liên kết với các lớp này?
HannahCarney

Tôi giả sử nó phải làm với các phụ thuộc tiêu đề. Tất cả các lớp có thể chỉ định được chạm vào các lớp khác, thời điểm tiêu đề được nhìn thấy, nó sẽ xây dựng các triển khai liên quan đó. Apple đang đùa giỡn với mã biểu đồ phụ thuộc nguồn trong XC7GM, điều này hoàn toàn thất bại trong dự án của chúng tôi với XCode bị lỗi khi xây dựng biểu đồ. 7.1betas sau đây không cho thấy vấn đề. Hệ thống xây dựng tự động của chúng tôi hiện vẫn phụ thuộc vào 6.4 vì vậy chúng tôi chưa tìm hiểu cách giải quyết vấn đề này thêm trong XC6.4. Chúng tôi sẽ chuyển thẳng lên 7,1GM.
Martin-Gilles Lavoie,

Nếu bạn có nhiều mục tiêu / dự án thì đây hoàn toàn là câu trả lời đúng và thực sự khắc phục được sự cố - TẤT CẢ mục tiêu phải được xây dựng sạch sẽ, tôi thậm chí còn không biết có phần "Trình tạo giao diện" trong trình điều hướng báo cáo! Tất cả các câu trả lời khác mà tôi đã thấy về cơ bản là rất nhiều cái vẫy tay có thể khắc phục nó tạm thời, nhưng đây là giải pháp cuối cùng. Làm tốt.
Ashley Mills

3
Vì vậy, theo điều này, chúng ta có thể kết luận rằng thuộc tính IB_DESIGNABLE là một sự lãng phí hoàn toàn và lãng phí thời gian. Chỉ cần tránh sử dụng nó.
m8labs

IB_DESIGNABLE không liên quan gì đến sự cố và giải pháp được liệt kê ở trên. Nó chỉ đơn thuần là một lá cờ KHÔNG MỞ để IB phát hiện những thứ có thể sử dụng được. Bạn chỉ cần duy trì một ngôi nhà sạch sẽ.
Martin-Gilles Lavoie,

22

Chỉ là một gợi ý nhanh cho bất kỳ ai khác gặp vấn đề này: hãy nhớ chỉ định loại biến.

// Doesn't show up in IB
@IBInspectable var includeLeftSection = true

// Shows now that it knows the type
@IBInspectable var includeLeftSection : Bool = true

6

Tôi đã có cùng một cảnh báo Ignoring user defined runtime attribute for key path .. mặc dù tôi hoàn toàn chắc chắn rằng mình không làm gì sai với lớp xem IBDesignable tùy chỉnh của mình.

Hóa ra, trong trường hợp của tôi, nó liên quan đến bộ nhớ cache Xcode.

rm -rf ~/Library/Developer/Xcode/DerivedData/*

Purge DerivedDatavà cảnh báo đã biến mất.


1
Phím tắt trong XCode để đạt được kết quả tương tự: ⌘⇧K
Mojo66

@ Mojo66 Tôi tin rằng Clean Build khác với việc xóa thư mục DerivedData. Tất nhiên, đôi khi bản dựng sạch sẽ đủ tốt để giải quyết một số vấn đề bộ nhớ đệm Xcode nhất định.
samwize

@ Mojo66 có lẽ bạn muốn nói đến ⌘⌥⇧K (cmd + alt + shift + K)
tzaloga

5

Trong trường hợp bất kỳ người nào khác xuất hiện với lỗi lớp IB Designables không tồn tại, vì lý do tương tự như tôi đã làm. Câu trả lời hàng đầu không phải là vấn đề của tôi ... nhưng đây là một vấn đề hơi liên quan ...

Có một thuộc tính ẩn trong mã nguồn của bảng câu chuyện được gọi là customModule.

Ví dụ, tôi có một lớp tên là ForwardArrow bên trong một khuôn khổ riêng biệt mà tôi đã vô tình thêm vào mục tiêu chính của mình.

Vì vậy, XML cho một số chế độ xem đã kết thúc là customClass = "ForwardArrow" customModule = "MainTargetNameWasHere"

Khi tôi xóa chúng khỏi mục tiêu chính trong bản dựng, bảng câu chuyện đã không cập nhật MainTargetNameWasHere thành CustomViews, đây là khuôn khổ nơi nó được đặt và bắt đầu không tìm thấy lỗi lớp nào.

Vì vậy, TLDR; Đảm bảo rằng nếu IBDesignable của bạn nằm trong một khuôn khổ khác thì thuộc tính xml customModule trong bảng câu chuyện của bạn được đặt thành giá trị phù hợp. Và nếu nó không có ở đó, hãy thêm nó vào.

Ví dụ từ nguồn của tôi:

<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="MUG-jc-2Ml" customClass="ForwardArrow" customModule="CustomViews">

1
Khỉ thật, chuyện này đã khiến tôi phát điên cả ngày rồi. Thật là một lỗi nhỏ khó chịu.
GoldenJoe

5

Như ví dụ của tôi, tôi đang sử dụng CheckboxButton qua pod và đồ họa của hộp kiểm không bao giờ hiển thị trong bảng phân cảnh trong khi tôi gặp các vấn đề tương tự được mô tả trong câu hỏi ở đây:

cảnh báo: IB Designables: Sử dụng UIView lớp cho đối tượng có lớp tùy chỉnh vì lớp CheckboxButton không tồn tại

cảnh báo: IB Designables: Bỏ qua thuộc tính thời gian chạy do người dùng xác định cho đường dẫn khóa "checkColor" trên trường hợp của "UIView". Nhấn vào một ngoại lệ khi cố gắng đặt giá trị của nó: [setValue: forUndefinedKey:]: lớp này không tuân thủ mã hóa giá trị khóa cho khóa checkColor.

Cách giải quyết vấn đề của tôi là cung cấp mô-đun với tên CheckboxButton như bên dưới:

Lưu ý: bạn nên thay thế CheckboxButton thành bất kỳ tên mô-đun nào bạn đang sử dụng.


4

Cá nhân tôi đã giải quyết vấn đề này bằng cách sử dụng nút "-" để xóa nội dung khỏi trình kiểm tra danh tính của mình. Khi bạn xóa các lớp tùy chỉnh, thay đổi nội dung trong IB và sau đó thêm một lớp tùy chỉnh mới, các phần tử có thể chỉ định trong trình kiểm tra danh tính sẽ không bị xóa và điều đó khiến tôi gặp lỗi đó. Chỉ cần Xóa mọi thứ và xây dựng lại.nhập mô tả hình ảnh ở đây


Tôi đã làm chính xác những gì bạn nói và nó đã giải quyết được vấn đề của tôi. Tất cả các giải pháp trước đó được đưa ra ở đây đều không thành công. Cảm ơn rất nhiều. ; o)
XLE_22

@ XLE_22 đôi khi chính những câu trả lời mà không ai nhìn vào sẽ giải quyết được nó, hả? :)
HannahCarney,

Tôi đã gặp sự cố khi đổi tên thuộc tính IBInspectable trên một số xib của mình. Sau khi làm điều đó, tôi đã có rất nhiều cảnh báo thông báo rằng XCode không thể tìm thấy thuộc tính hiện đã được đổi tên. Xóa thuộc tính khỏi trình kiểm tra danh tính đã khắc phục sự cố của tôi.
WBuck

1

Tôi biết điều này đã được trả lời, nhưng đây là một kinh nghiệm nữa.

Tôi đang gặp một số vấn đề không liên quan đến vấn đề này, nhưng trong quá trình này, tôi đã xóa @IBInspectable khỏi các vars trong lớp của mình và xóa các thuộc tính khỏi trình kiểm tra danh tính (alt-apple-3).

Sau khi khắc phục sự cố (mã) với thành phần, tôi đã làm mới mọi thứ rất nhiều lần, nhưng vẫn không có thuộc tính nào trong trình kiểm tra danh tính.

Cuối cùng, tôi nhận thấy rằng họ đã trở lại, nhưng chỉ trong trình kiểm tra thuộc tính (alt-apple-4) . Ngay sau khi tôi thêm các giá trị cho chúng ở đó, chúng lại xuất hiện trong trình kiểm tra danh tính


1

Câu trả lời của Dave Thomas ở trên đã cho tôi giải pháp (ngược lại) khi không phải giải pháp khác (Dữ liệu gốc, Trình chỉnh sửa> Làm mới) đã làm, nhưng để rõ ràng trong trường hợp mọi người không chắc chắn nơi chỉnh sửa XML ... bạn không nên ' t cần!

  1. Trong tệp bảng phân cảnh của bạn, hãy chọn chế độ xem rắc rối
  2. Trên thanh bên bên phải, chọn tab Trình kiểm tra danh tính (tùy chọn thứ 3 từ bên trái).
  3. Bạn sẽ có lớp tùy chỉnh của mình, lớp này đã được đặt sẵn và Module. Đối với tôi, điều này trống rỗng và tôi đã gặp các lỗi tương tự như OP. Tôi đặt tên dự ánModule của mình và BAM - nó bắt đầu hoạt động sau khi xây dựng lại!

0

Tôi chỉ đi qua chuông về vấn đề này. Tôi đã thử tất cả những thứ được liệt kê ở đây và nơi khác mà không gặp may mắn. Đây là một bảng phân cảnh hoạt động tốt mãi mãi và nó đột nhiên ngừng hoạt động với sự cố "Bỏ qua thuộc tính thời gian chạy do người dùng xác định ...".

Vì bất kỳ lý do gì, việc xóa mã này khỏi một trong những IBDesignable của tôi đã sửa nó:

-(void)viewDidLoad {
    self.clipsToBounds = YES;
}

loại bỏ điều này khiến tất cả các cảnh báo biến mất, ngay cả trong các đối tượng IBDesignable khác. Tôi không biết tại sao một bước này lại sửa được nó, nhưng có lẽ nó cũng sẽ giúp ích cho người khác.


3
bạn đã bỏ lỡ cuộc gọi để ăn tối ở đây
RolandasR

0

Tôi đang gặp vấn đề tương tự và tôi phải thay đổi angleRadius và BorderWidth thành Chuỗi rồi truyền nó sang CGFloat, đó là giải pháp duy nhất để tôi có thể thay đổi các giá trị và xem các thay đổi trong trình tạo giao diện.

@IBInspectable var borderColor: UIColor? {
    didSet {
        layer.borderColor = borderColor!.CGColor
    }
}

@IBInspectable var borderWidth: String? {
    didSet {
        layer.borderWidth = CGFloat(Int(borderWidth!) ?? 0)
    }
}

@IBInspectable var cornerRadius: String? {
    didSet {
        layer.cornerRadius = CGFloat(Int(cornerRadius!) ?? 0)
        layer.masksToBounds = layer.cornerRadius > 0
    }
}

Tôi nghĩ IBInspectable chỉ có thể làm một số loại, vì vậy có thể bạn sẽ cần thiết để sử dụng Floatthay vì CGFloatvà dàn diễn viên mà thay vào đó
Fonix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.