嗨iPhone应用程序开发人员,
我正在开发一个iphone应用程序。 此应用程序允许用户将图像上载到我的服务器。 我想在alertView中显示上传进度。 我需要一些示例代码来说明如何使用进度条实现自定义UIAlertView。
提前致谢。
答案 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