如何使用进度条和取消按钮实现自定义UIAlertview?

时间:2009-11-01 03:30:40

标签: iphone progress-bar uialertview

嗨iPhone应用程序开发人员,

我正在开发一个iphone应用程序。 此应用程序允许用户将图像上载到我的服务器。 我想在alertView中显示上传进度。 我需要一些示例代码来说明如何使用进度条实现自定义UIAlertView。

提前致谢。

3 个答案:

答案 0 :(得分:13)

执行此操作的“快速”方法是使用UIAlertView并重新定位其内部子视图以将进度条推入其中。其缺点是它很脆弱,未来可能会破裂。

执行此操作的正确方法需要实现UIWindow的子类,并将其窗口级别设置为UIWindowLevelAlert,以便在当前窗口前绘制。获得一些工作应该相当容易,但让它看起来像内置警报之一需要付出很多努力。

在你做其中任何一个之前,我建议你重新考虑你的用户界面。为什么应用程序在上传时会阻塞。为什么不在屏幕上的某个位置放置状态栏,让用户在异步上传时与应用程序保持交互。看一下消息应用程序在上传彩信时的工作原理,以了解我所说的内容。

当应用程序在某些事情发生时阻止它们时,用户讨厌它,特别是在没有多任务处理的iPhone上。

答案 1 :(得分:3)

我知道您要求在警报中执行该操作,但您可能需要结帐http://github.com/matej/MBProgressHUD

答案 2 :(得分:0)

您可以继承UIAlertView。我做过类似的事情,根据你的需要改变它。

标题文件,

#import <Foundation/Foundation.h>

/* An alert view with a textfield to input text.  */
@interface AlertPrompt : UIAlertView    
{
    UITextField *textField;
}

@property (nonatomic, retain) UITextField *textField;
@property (readonly) NSString *enteredText;

- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitle:(NSString *)okButtonTitle;

@end

源代码,

#import "AlertPrompt.h"


@implementation AlertPrompt

static const float kTextFieldHeight     = 25.0;
static const float kTextFieldWidth      = 100.0;

@synthesize textField;
@synthesize enteredText;

- (void) drawRect:(CGRect)rect {
    [super drawRect:rect];

    CGRect labelFrame;
    NSArray *views = [self subviews];
    for (UIView *view in views){
        if ([view isKindOfClass:[UILabel class]]) {
            labelFrame = view.frame;
        } else {    
            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + kTextFieldHeight , view.frame.size.width, view.frame.size.height);
        }

    }

    CGRect myFrame = self.frame;
    self.textField.frame = CGRectMake(95, labelFrame.origin.y+labelFrame.size.height + 5.0, kTextFieldWidth, kTextFieldHeight);
    self.frame = CGRectMake(myFrame.origin.x, myFrame.origin.y, myFrame.size.width, myFrame.size.height + kTextFieldHeight);

}

- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitle:(NSString *)okayButtonTitle
{

    if (self = [super initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:okayButtonTitle, nil])
    {
        // add the text field here, so that customizable from outside. But set the frame in drawRect. 
        self.textField = [[UITextField alloc] init];
        [self.textField setBackgroundColor:[UIColor whiteColor]]; 
        [self addSubview: self.textField];

       // CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 20.0); 
      //  [self setTransform:translate];
    }
    return self;
}
- (void)show
{
    [textField becomeFirstResponder];
    [super show];
}
- (NSString *)enteredText
{
    return textField.text;
}
- (void)dealloc
{
    [textField release];
    [super dealloc];
}
@end