2014-10-06 86 views
10

如果可能,我想使用故事板設置邊框顏色。我見過的答案在這裏:UITextField border colorUITextField使用故事板設置邊框顏色

我跟着回答故事板: enter image description here

所有屬性設置,但文本字段不顯示邊框。有什麼建議麼?

+0

你可以看到【如何在故事板中添加邊框](http://stackoverflow.com/questions/12301256/is-it-possible-to-set-uiview-border-properties-from-interface-builder/ 30348021#30348021) – iHulk 2015-05-20 11:10:41

回答

2

我不確定你可以在故事板中更改UITextfield的邊框顏色。你可以通過編程方式改變它;

UITextField *myTextField = (UITextField *)[self.view viewWithTag:1]; 
myTextField.borderStyle = UITextBorderStyleLine; 
myTextField.layer.borderWidth = 2; 
myTextField.layer.borderColor = [[UIColor redColor] CGColor]; 

希望這會有所幫助。

+0

@katit - 是否有任何幫助,或者您是否找到了在故事板中執行此操作的方法? – Gismay 2014-10-09 11:22:26

0

由於layer.borderColor屬性,它不顯示任何邊框。它是CGColor類型的,運行時屬性在默認情況下還不支持,所以只設置一個屬性錯誤,也會禁用其他屬性。

要從故事板做,但也涉及一些代碼和子類,你可以使用這個方法:

子類的UITextField並作出IB_DESIGNABLE的UIColor屬性,你會再變成CGColor並應用到self.layer.borderColor

7

正如Bogdan指出的那樣,在故事板中找不到layer.borderColor屬性是因爲它是運行時的事情。

但是,你仍然可以設置borderColor不使用IB_DESIGNABLE,在任何視圖(或UIView子類)與一點點的編碼。

下面的步驟是如何實現的,

  1. 創建上的CALayer類的類別。聲明類型的UIColor用合適的名稱的屬性,我將其命名爲borderUIColor
  2. 爲此屬性編寫setter和getter。
  3. 在'Setter'方法中,只需將圖層的「borderColor」屬性設置爲新顏色CGColor值即可。
  4. 在'Getter'方法返回UIColor與圖層的borderColor。

P.S:記住,類別不能有存儲性能。 'borderUIColor'用作計算屬性,僅作爲實現我們所關注的內容的參考。

請看看下面的代碼示例;

目標C:

接口文件:

#import <QuartzCore/QuartzCore.h> 
#import <UIKit/UIKit.h> 

@interface CALayer (BorderProperties) 

// This assigns a CGColor to borderColor. 
@property (nonatomic, assign) UIColor* borderUIColor; 

@end 

實現文件:

#import "CALayer+BorderProperties.h" 

@implementation CALayer (BorderProperties) 

- (void)setBorderUIColor:(UIColor *)color { 
    self.borderColor = color.CGColor; 
} 

- (UIColor *)borderUIColor { 
    return [UIColor colorWithCGColor:self.borderColor]; 
} 

@end 

夫特3.1:

extension CALayer { 
    var borderUIColor: UIColor { 
     set { 
      self.borderColor = newValue.cgColor 
     } 

     get { 
      return UIColor(cgColor: self.borderColor!) 
     } 
    } 
} 

最後去你的故事板/ XIB,按照其餘的步驟;

  • 單擊您要設置邊框顏色視圖對象。
  • 在「Utility」(屏幕右側)面板上點擊「Identity Inspector」(左起第3個)。
  • 在「用戶定義的運行時屬性」下,單擊「+」按鈕添加關鍵路徑。
  • 將關鍵路徑的類型設置爲「Color」。
  • 輸入關鍵路徑的值爲「layer.borderUIColor」。 [請記住這應該是變量名稱你在類別中聲明,而不是borderColor這裏它是borderUIColor]。
  • 最後選擇你想要的任何顏色。
  • 編輯:您必須設置layer.borderWidth屬性值至少爲1以查看邊框顏色。

    構建和運行。 快樂編碼。 :)

    +0

    對於** Swift 3 **,您只需在** Swift 2 **版本中用'cgColor'替換'CGColor'的所有實例。 – CAD97 2017-05-06 18:39:37

    0

    這是一個超過@rameswar的答案,我認爲這是正確的。由於我們應用UIColor,我認爲這是最好寫的,而不是UITextField延長(UI東西放在一起):

    extension UITextField { 
    
        var borderColor : UIColor? { 
        get { 
         if let cgcolor = layer.borderColor { 
         return UIColor(CGColor: cgcolor) 
         } else { 
         return nil 
         } 
        } 
        set { 
         layer.borderColor = newValue?.CGColor 
    
         // width must be at least 1.0 
         if layer.borderWidth < 1.0 { 
         layer.borderWidth = 1.0 
         } 
        } 
        } 
    } 
    

    運行時性能會再borderColor(所以你不需要輸入layer.我認爲它比borderUIColor更清潔)。

    CALayerborderColor是可選的,所以它是屬性。它設置爲黑色時nil

    最後,layer.borderWidth它被設置爲最低1.0,因爲它沒有設置其他顏色。

    3

    那麼Bogdan指出,你可以做到這一點,只需簡單的子類和只是幾個代碼。之後,所有內容都將在Storyboard中進行編輯。

    1. 子類的UITextField
    2. 創建兩個屬性,一個是邊框的寬度,一個用於邊框顏色
    3. 讓這些變量IBInspectable和全班IBDesignable
    4. 你就可以改變邊框的顏色和寬度並實時查看變化。

    代碼說明(雨燕3.1):

    @IBDesignable 
    class FormTextField: UITextField { 
    
        @IBInspectable var borderColor: UIColor? { 
         didSet { 
          layer.borderColor = borderColor?.cgColor 
         } 
        } 
    
        @IBInspectable var borderWidth: CGFloat = 0 { 
         didSet { 
          layer.borderWidth = borderWidth 
         } 
        } 
    } 
    

    編輯:您將在看到這個屬性檢查器

    Attributes Inspector