2013-03-27 61 views
0

我試圖創建一個函數來更改UILabel或UIButton之類的東西的大小,而不必每次都輸入三行。這是我的。然而,當我給(UIControl *)對象一個UILabel,它說「不兼容的指針類型」。我怎樣才能解決這個問題,我可以把它放在UIView上?嘗試通過函數設置UIControl對象的框架

+0

一些樣式問題。遵循Obj-C風格約定使其他人更有效地閱讀和理解我們的代碼。 1.所有方法參數都應以小寫字母開頭。 2.'set'用作'@ property'綜合的一部分,按照慣例你的方法名稱表示將一個名爲'object'的屬性設置爲'object'的值,然後設置它的寬度和高度。 3. Objective-C中的大部分內容都是一個對象...並且當您明確使用視圖時,您有一個名爲'setObject:'的方法? 4.爲什麼通過寬度和高度,當你可以通過CGSize? – 2013-03-27 01:55:59

+0

我在這方面還是有點新的,但我一定會牢記這些。謝謝! – aeubanks 2013-03-27 02:07:28

+0

沒問題。我覺得@aeubanks,這就是爲什麼我想幫助。試圖成爲最好的是堆棧溢出的全部重點。 – 2013-03-27 02:22:07

回答

0

標籤不是UIControl的子類。您可以使用UIView代替UIControl。

Here is the hierarchy for UILabel 
UILabel: UIView : UIResponder : NSObject 

-(void)setObject:(UIView*)object SizeWidth:(NSInteger)width Height:(NSInteger)height 
{ 
    CGRect labelFrame = object.frame; 
    labelFrame.size = CGSizeMake(width, height); 
    object.frame = labelFrame; 
} 

對您的一個建議是,方法名稱似乎對我來說有點奇怪。您可以編寫一個簡單的類別來更新UIView的大小。與下列類別,你可以簡單地調用

[myLabel setWidth:20 andHeight:20]; 

在UIView的+ MyCategory.h

#import <UIKit/UIKit.h> 

@interface UIView (MyCategory) 

- (void)setWidth:(NSInteger)aWidth andHeight:(NSInteger)aHeight; 

@end 

在UIView的+ MyCategory.m

#import "UIView + MyCategory.h" 
@implementation UIView (MyCategory) 

- (void)setWidth:(NSInteger)aWidth andHeight:(NSInteger)aHeight; 
{ 
    CGRect frameToUpdate = self.frame; 
    frameToUpdate.size = CGSizeMake(aWidth, aHeight); 
    self.frame = frameToUpdate; 
} 

@end 
+0

我很困惑MyCategory.h是什麼。但是你的方式看起來很簡單,我一定要實現它。謝謝! – aeubanks 2013-03-27 01:57:44

+0

沒關係,我查了一下,現在就明白了。非常感謝 – aeubanks 2013-03-27 02:11:20

1

UILabel不是UIControl的子類,它繼承自UIView

嘗試改變UIControlUIView

-(void)setObject:(UIView*)object SizeWidth:(NSInteger)width Height:(NSInteger)height 
{ 
    CGRect labelFrame = object.frame; 
    labelFrame.size = CGSizeMake(width, height); 
    object.frame = labelFrame; 
} 

(從UIViewUIControl繼承反正,和frameUIView屬性)

0

Followi ng Obj-C風格的約定(爲工作選擇正確的工具)使其他人更有效地閱讀和理解我們的代碼。這裏的Objective-C風格需要一些清理。如果您有興趣,請在源文件後查看我的筆記。在一個更簡潔的方式來做到這一點:

你可以去類方法途徑(也許在一個視圖操作類)

@implementation CCViewGeometry 

+ (void)adjustView:(UIView *)view toSize:(CGSize)size 
{ 
    CGRect frame = view.frame; 
    frame.size = size; 
    view.frame = frame; 
} 

@end 

或UIView的類路徑

@implementation UIView (CCGeometry) 

- (void)resize:(CGSize)size 
{ 
    CGRect frame = self.frame; 
    frame.size = size; 
    self.frame = frame; 
} 

@end 

風格筆記與此頁上的代碼相關:

  1. 全部方法params應以小寫字母開頭。

  2. setFoo:@property合成&使用常規方法名稱指示設置了一個名爲objectobject value屬性。你正在設置大小,而不是對象本身。

  3. 請明確。當你知道被傳遞的對象的一般類型時,爲什麼有一個叫做setObject:的方法?

  4. 寬度& UIKit中的高度由CGFloat(而非NSInteger)表示(正確)。爲什麼通過寬度+高度而不是CGSize呢?

  5. 當不需要狀態時,請嘗試使用類方法。 +是你的朋友。不要爲每個小東西啓動實例(我在ObjC代碼中看到的大多數單例方法應該被重構爲類方法)。

不計較小事情程序員結束了不可維護的代碼,代碼,將減緩他們和那些後他們下來。公約和風格對任何像樣大小的項目都很重要。

相關問題