簡體   English   中英

使用UIView或覆蓋UIButton制作自定義按鈕?

[英]Making a custom Button using a UIView or overriding UIButton?

我需要通過代碼生成一個自定義按鈕,這就是我目前正在做的事情。

-(void) initialiseButtons 
{
    int ypos = playerImage.frame.origin.y + playerImage.frame.size.height + 8;
    for(int i=0; i<totalButtons; i++) 
    {       
        UIButton *newButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];    
        [newButton setFrame:CGRectMake(20, ypos, 220, 30)];
        newButton.tag = 10 + i;
        [newButton addTarget:self action:@selector(statTapped:) forControlEvents:UIControlEventTouchUpInside];
        [self.frontView addSubview:newButton];
        ypos += 30 + 7;
    }
}

這將通過代碼完美地創建空白按鈕,為它們提供標記並在touchUpInside上分配回調函數。

自定義按鈕需要能夠處理按下時顯示圖像。 它需要能夠繪制2個文本。 1對齊於按鈕的左側,1對齊於按鈕的右側。

我的老板建議使用View而不是按鈕。 我不明白這是如何工作的。 當我開始考慮它時,我認為它需要一個專用於按鈕的viewcontroller。 還有一些繪制方法? 這聽起來很復雜,我不知道如何做到這一點。

通過使自定義類重寫UIButton,有一個更簡單的方法嗎? 我之前做了一個簡單的測試類,但當我使用它們代替Normal UIButton類時,按鈕位置沒有繪制任何內容。 我預計我會看到buttonUp.png被繪制。

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

@interface CardButton : UIButton {
}
@end


#import "CardButton.h"
#import <UIKit/UIKit.h>
@implementation CardButton
- (id)initWithFrame:(CGRect)frame 
{
    if (self = [super initWithFrame:frame]) 
    {
        [self setImage:[UIImage imageNamed:@"buttonUp.png"] forStates:UIControlStateNormal];
        self.adjustsImageWhenHighlighted = YES;
    }
    return self;
}
@end

有人能給我一些指示嗎? 我現在很沮喪。 一直在閱讀一些與按鈕相關的其他各種線程,但沒有什么能夠清楚地說明如何解決這個問題

就個人而言,我會將UIButton子類化。 盡管所有人都不能將UIButton作為子類,但Apple甚至在UIButton文檔中討論了UIButton的子類化。

在子類中,我將創建一個帶有兩個標簽(或圖像或其他)的UIView,並將它們作為子視圖添加到按鈕中(確保將文本和視圖的交互設置為FALSE)。

令人敬畏的是它利用UIButton代碼並防止您重新發明輪子。

你不應該(我幾乎不能說你不能) UIButton ,因為它原來是一個類集群,並且從那里得到它是不切實際的(讀:不可能)。

所以你的兩個選擇是:

1)使用自定義類型的標准UIButton ,添加要顯示的元素(即UILabel )並連接觸摸和觸摸的動作並做出相應的反應(更改視圖,觸發操作等)

2)使用自定義UIView ,實現drawRect:繪制您喜歡的方式或使用自定義視圖作為1)中的子視圖。 然后使用touchesBegan:touchesEnded:等消息進行相應的反應(如果你能兼容3.2+,則使用UIGestureRecognizer )。

如果它們都非常相似,您可以構建一個工廠來構建這些按鈕,這樣您的代碼就變得干凈且無重復。

根據iOS 6進行編輯: Apple現在提到了UIButton文檔中的子類化,所以雖然目前還沒有很好地定義,但現在這樣做似乎很安全。

一個簡單的方法是覆蓋UIView。 在視圖中,您將UIButton添加為子視圖。 這樣,您就擁有了可重用的類,而無需重新實現按鈕行為。

您可以在UIView派生類的initWithFrame方法中按照自己的方式設置按鈕的樣式。 如果您將此類用作按鈕事件的目標,則可以輕松實現特殊行為,例如顯示圖像。

對於這兩段文本,您可以創建兩個標簽,並將它們作為子視圖添加到按鈕中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM