2011-12-21 16 views
8

Vì vậy, tôi đang cố thay đổi UILabel trên số UIButton thành phiên bản của số FXLabel thay thế. Xem liên kết để biết thêm chi tiết về số FXLabel (https://github.com/nicklockwood/FXLabel). Tôi biết bằng cách sử dụng các phần mở rộng lớp học (Subclass UIButton to add a property), tôi luôn có thể thêm một thuộc tính khác, trong trường hợp của tôi, một FXLabel bằng cách chỉ thêm một subview về cơ bản. Tuy nhiên, tôi thích sự tiện lợi và tính năng của tài sản titleLabel đã có.Tôi có thể * thay thế * UILabel trên UIButton bằng FXLabel không?

Có phương pháp nào để "chuyển đổi" UILabel cho một lớp học hoặc danh mục không? FXLabel?

Tôi biết mình có thể làm được điều này, nhưng đó là một hack và không phải là bằng chứng trong tương lai. Và tôi không biết làm thế nào để sau đó thay đổi loại lớp học (Get UILabel out of UIButton).

UILabel *label; 
for (NSObject *view in button.subviews) { 
    if ([view isKindOfClass:[UILabel class]]) { 
     label = (UILabel *)view; 
     break; 
    } 
} 

Suy nghĩ ?? Cảm ơn.

Trả lời

5

Dưới đây là một cách khác mà bạn ít nhất có thể truy cập nhãn. Tạo một lớp con của UIButton và trong phân lớp đó ghi đè layoutSubviews. Từ đó, bạn có thể truy cập trực tiếp vào nhãn:

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    UILabel *titleLabel = [self titleLabel]; 
} 

Bây giờ, chúng tôi vẫn gặp khó khăn khi thay đổi nhãn đó thành lớp con. Tôi đoán bạn có thể cố gắng tự động trao đổi lớp học của UILabel với lớp con FXLabel của bạn (như chi tiết here), nhưng phải trung thực đó là khá nguy hiểm.

Tôi muốn nói rằng bạn tốt hơn là chỉ cần tạo UIControl của riêng bạn mà bạn có thể tùy chỉnh cho nội dung trái tim của mình. Không có rủi ro, chỉ là sự tốt lành thuần khiết. Nó không quá khó để bắt chước một đơn giản UIButton. Chúc may mắn!

+0

Cảm ơn mẹo. Tôi nghĩ tôi sẽ cố gắng tạo lớp tùy chỉnh của riêng mình. Tôi sẽ đánh dấu điều này là trả lời câu hỏi của tôi nếu không ai khác cho tôi bất cứ điều gì tốt hơn. Cảm ơn! –

+1

Tôi vừa mới hack nó và thêm nhãn lên trên đầu nút mà không thực sự thiết lập văn bản trên nút. Bây giờ tôi phải theo dõi hai thuộc tính cho các thay đổi alpha, vv, nhưng nó dễ dàng hơn nhiều so với cố gắng tạo UIControl của riêng tôi. Tôi sẽ làm việc trong tương lai và xem tôi có nhận được gì không –

1

Xin lỗi vì đã nói nhưng tôi không nghĩ bạn có thể làm điều này theo bất kỳ cách đáng tin cậy nào. Ngay cả khi bạn đã phân loại UIButton và bỏ qua các phương thức titleLabel, bạn cũng phải xử lý cài đặt trạng thái. Và bạn không bao giờ biết khi nào mã nội bộ đề cập trực tiếp đến một mã vạch riêng cho nhãn.

Tôi đã tạo một lớp con của UIButton cho ứng dụng của tôi để làm điều gì đó tương tự (bố cục nút tùy chỉnh & subviews), xin lỗi tôi không thể chia sẻ nó ngay bây giờ, nó thuộc sở hữu của khách hàng. Không quá khó để tạo mã xử lý trạng thái của riêng bạn cho các bản xem trước của riêng bạn.

+0

Cảm ơn sự giúp đỡ. Tôi sẽ xem những gì tôi có thể đặt lại với nhau. –

Các vấn đề liên quan