2011-09-07 109 views
0

我有一個問題..我用這個http://kwigbo.com/post/318396305/iphone-sdk-custom-uialertview-background-color來創建我自己的自定義UIAlertView。 我不知道爲什麼,但是這是行不通的:自定義UIAlertView iphone

UILabel *theTitle = [theAlert valueForKey:@"_titleLabel"]; 

[theTitle setTextColor:[UIColor redColor]]; 

UILabel *theBody = [theAlert valueForKey:@"_bodyTextLabel"]; 

[theBody setTextColor:[UIColor blueColor]]; 

標題的顏色不會改變.. texbody的顏色它的確定。

  1. 如何自定義按鈕?
+0

[theAlert valueForKey:@「_ titleLabel」];回報什麼? nssstring或uilabel? – Maulik

回答

2

嗨實現使用自定義UIAleartView同樣的事情。

  1. 按如下方式製作自定義視圖。

    UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 5.0f, 262.0, 49)]; 
    tempView.backgroundColor = [UIColor clearColor]; 
    
    UILabel *lblTitle = [[UILabel alloc] initWithFrame:CGRectMake(12, 0, 262.0, 49)]; 
    lblTitle.font = [UIFont fontWithName:@"Arial" size:22.0f]; 
    lblTitle.textColor = [UIColor whiteColor]; 
    lblTitle.textAlignment = UITextAlignmentCenter; 
    lblTitle.text = @"Subscribe"; 
    lblTitle.backgroundColor = [UIColor clearColor]; 
    [tempView addSubview:lblTitle]; 
    
    alreadySubscriber = [[UIButton alloc] initWithFrame:CGRectMake(12, 260, 262.0, 50)]; 
    alreadySubscriber.layer.cornerRadius = 25.0f; 
    [alreadySubscriber setTitle:@"Already a subscriber" forState:UIControlStateNormal]; 
    [alreadySubscriber setBackgroundImage:[UIImage imageNamed:@"BTN0.png"] forState:UIControlStateNormal]; 
    [alreadySubscriber setBackgroundImage:[UIImage imageNamed:@"BTN1.png"] forState:UIControlStateSelected]; 
    [tempView addSubview:alreadySubscriber]; 
    
  2. 插入這UIAleartView

    [self insertSubview:tempView atIndex:0]; 
    [self setNeedsLayout]; 
    
  3. 覆蓋layoutsubview因爲你已經做了推動所有其他控件下來等於圖高度。

- >基本問題是隱藏UIAleartView標題後面的標題。

+0

alreadySubscriber是一個普通的UIButton? alreadySubscriber.layer.cornerRadius = 25.0f;是錯誤? – Safari

+0

添加#import 來解決它.... – Mohammad

+0

我該如何糾正按照我的自定義警報的大小 按鈕的位置? – Safari

2

不確定您的問題可能是什麼,但我們在嘗試鍛鍊自定義UIAlertView時面臨類似的情況,因此可能會類似。

您提供的鏈接中的自定義解決方案似乎通過訪問子視圖層次結構和「猜測」哪個子視圖可能是哪個來操縱警報標題和背景。 (我可能是錯的,沒有詳細介紹)這種方法的問題在於它對於一個操作系統版本可以正常工作,但在後續的操作系統版本中,蘋果可能會以某種方式重組這個子視圖層次結構, 「猜測」不再準確。 (即假定爲背景圖像的子視圖可能不是)。

這可能是這種情況,看到張貼的鏈接是一歲。如果您正在處理此問題,則可能需要查看子視圖層次結構以查看它們是否仍匹配。

0

我相信,你可以找到適當的解決方案,而無需使用UIAlertView中存在的標準工具。但在這種情況下,您的應用程序將不被AppStore批准。這樣,我強烈建議您,避免在AlertView中使用自定義按鈕。 也許,你會發現解決方案使用UIActionSheet,而不是UIAlertView。這是更多的自定義。

0

如果@"_titleLabel"UIAlertView層次結構的一部分(看起來可能是_前綴),我不推薦您的方法。

蘋果可能有一天會改變關鍵字符串:如果@"_titleLabel"有變化,比如說@"_titleLabelView",你就會沉沒,你可能永遠不會知道你是沉沒的。這可能是拒絕的理由,我不知道。

最好從頭開始用自己的自定義視圖,子類UIView。只有這樣你才能保證這將從操作系統到操作系統穩定。最重要的是,你失去嘗試尋找快捷方式的時間將積極花費在構建一些持久的事情上。