我試圖創建一個函數來更改UILabel或UIButton之類的東西的大小,而不必每次都輸入三行。這是我的。然而,當我給(UIControl *)對象一個UILabel,它說「不兼容的指針類型」。我怎樣才能解決這個問題,我可以把它放在UIView上?嘗試通過函數設置UIControl對象的框架
回答
標籤不是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
UILabel
不是UIControl
的子類,它繼承自UIView
。
嘗試改變UIControl
到UIView
:
-(void)setObject:(UIView*)object SizeWidth:(NSInteger)width Height:(NSInteger)height
{
CGRect labelFrame = object.frame;
labelFrame.size = CGSizeMake(width, height);
object.frame = labelFrame;
}
(從UIView
UIControl
繼承反正,和frame
是UIView
屬性)
,並解決你的實際問題試圖解決,我強烈建議使用這套幫手https://github.com/kreeger/BDKGeometry
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
風格筆記與此頁上的代碼相關:
全部方法params應以小寫字母開頭。
setFoo:
在@property
合成&使用常規方法名稱指示設置了一個名爲object
到object
value屬性。你正在設置大小,而不是對象本身。請明確。當你知道被傳遞的對象的一般類型時,爲什麼有一個叫做
setObject:
的方法?寬度& UIKit中的高度由CGFloat(而非NSInteger)表示(正確)。爲什麼通過寬度+高度而不是CGSize呢?
當不需要狀態時,請嘗試使用類方法。
+
是你的朋友。不要爲每個小東西啓動實例(我在ObjC代碼中看到的大多數單例方法應該被重構爲類方法)。
不計較小事情程序員結束了不可維護的代碼,代碼,將減緩他們和那些後他們下來。公約和風格對任何像樣大小的項目都很重要。
- 1. 通過函數設置New-Timespan對象
- 2. 嘗試通過嵌套函數在對象中存儲值
- 3. 通過函數參數動態設置json對象的值
- 4. Javascript:嘗試將函數設置爲數組中的對象的成員
- 5. 值對象通過實體框架
- 6. 不Zend框架urldecode通過$ request對象
- 7. 嘗試通過回調函數失敗
- 8. 嘗試從函數返回對象
- 9. 嘗試設置子視圖的框架上UICollectionViewCell
- 10. 通過jquery設置對象的值Each()
- 11. 配置通過Spring框架
- 12. 過濾通過Django的REST的框架範圍內對象屬性的對象
- 13. 「未定義指數」嘗試添加ORM對象Kohana的PHP框架
- 14. 通過引用設置對象屬性
- 15. Javascript:通過對象函數內的點擊函數調用對象函數
- 16. 通過函數的Python對象
- 17. 通過顯示對象的JavaScript函數
- 18. 間歇性的「嘗試通過$ this請求/無法設置對象屬性的嘗試賦予非對象的屬性」
- 19. 將imageView的新框架設置爲故事板對象的框架
- 20. Thymeleaf通過設置對象爲對象的成員來控制
- 21. 通過顯示java.lang.NullPointerException引起:嘗試上的空對象引用
- 22. 嘗試通過套接字接收對象時的OptionalDataException
- 23. 通過索引設置數組對象的值設置所有數組項目
- 24. 嘗試通過腳本設置SQL Server的全文搜索
- 25. 嘗試通過laravel中的控制器設置.env變量
- 26. 嘗試取消設置ResultSet中的對象CakePHP3
- 27. 嘗試設置IOException對象中的消息
- 28. 嘗試實現抽象工廠時,對象引用未設置爲對象
- 29. 「對象引用未設置爲對象的實例」嘗試添加到列表
- 30. 嘗試連接時MySQL.Data:「對象引用未設置爲對象的實例」
一些樣式問題。遵循Obj-C風格約定使其他人更有效地閱讀和理解我們的代碼。 1.所有方法參數都應以小寫字母開頭。 2.'set'用作'@ property'綜合的一部分,按照慣例你的方法名稱表示將一個名爲'object'的屬性設置爲'object'的值,然後設置它的寬度和高度。 3. Objective-C中的大部分內容都是一個對象...並且當您明確使用視圖時,您有一個名爲'setObject:'的方法? 4.爲什麼通過寬度和高度,當你可以通過CGSize? – 2013-03-27 01:55:59
我在這方面還是有點新的,但我一定會牢記這些。謝謝! – aeubanks 2013-03-27 02:07:28
沒問題。我覺得@aeubanks,這就是爲什麼我想幫助。試圖成爲最好的是堆棧溢出的全部重點。 – 2013-03-27 02:22:07