2013-02-25 69 views
0

我从github开始执行此项目。如何重新加载UIAlertView消息

它是自定义的AlertView。我明白它是如何工作的。修改为我的项目,像这样

enter image description here

Course1 - 一些产品的名称, '1' - 是它的量。当我输入正/负数量增加/减少时。但它只适用于我的变量(当我显示它时,我加载到这个AlertView上,它是1)。如何通过更改var(金额)重新加载此警报视图的消息。我无法理解。 在这里我的代码。

在我的课堂我叫警报查看该代码

BlockAlertView *alert = [BlockAlertView alertWithTitle: title message:ac.acCount]; 

[alert setCancelButtonWithTitle:@"-" block:nil]; 
[alert setDestructiveButtonWithTitle:@"+" block:^{ 
      int u = [ac.acCount intValue]; 
      u++; 
      ac.acCount = [NSString stringWithFormat:@"%d", u]; 
      NSLog(@"%d", u); 
     }]; 
     [alert addButtonWithTitle:@"Ok" block:^{ 
      NSMutableArray *container = [[NSMutableArray alloc] init]; 
      [container addObject:title]; 
      [container addObject:price]; 
      [container addObject:bId]; 
      [container addObject:ac.acCount]; 
      [container addObject:depid]; 
      [[NSNotificationCenter defaultCenter] postNotificationName:@"MyNotification" object:container]; 
     }]; 
     [alert show]; 

显示方法只是绘制警报视图使用参数从alertWithTitle需要:标题消息:ac.acCount。下面是代码

+ (BlockAlertView *)alertWithTitle:(NSString *)title message:(NSString *)message 
{ 
    return [[[BlockAlertView alloc] initWithTitle:title message:message] autorelease]; 
} 

这里

- (id)initWithTitle:(NSString *)title message:(NSString *)message 
{ 
NSLog(@"title - %@ message - %@", title, message); 

if ((self = [super init])) 
{ 
    UIWindow *parentView = [BlockBackground sharedInstance]; 
    CGRect frame = parentView.bounds; 
    frame.origin.x = floorf((frame.size.width - background.size.width) * 0.5); 
    frame.size.width = background.size.width; 

    _view = [[UIView alloc] initWithFrame:frame]; 
    _blocks = [[NSMutableArray alloc] init]; 
    _height = kAlertViewBorder + 6; 

    if (title) 
    { 
     CGSize size = [title sizeWithFont:titleFont 
         constrainedToSize:CGSizeMake(frame.size.width-kAlertViewBorder*2, 1000) 
          lineBreakMode:UILineBreakModeWordWrap]; 

     UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(kAlertViewBorder, _height, frame.size.width-kAlertViewBorder*2, size.height)]; 
     labelView.font = titleFont; 
     labelView.numberOfLines = 0; 
     labelView.lineBreakMode = UILineBreakModeWordWrap; 
     labelView.textColor = kAlertViewTitleTextColor; 
     labelView.backgroundColor = [UIColor clearColor]; 
     labelView.textAlignment = UITextAlignmentCenter; 
     labelView.shadowColor = kAlertViewTitleShadowColor; 
     labelView.shadowOffset = kAlertViewTitleShadowOffset; 
     labelView.text = title; 
     [_view addSubview:labelView]; 
     [labelView release]; 

     _height += size.height + kAlertViewBorder; 
    } 

    if (message) 
    { 
     CGSize size = [message sizeWithFont:messageFont 
          constrainedToSize:CGSizeMake(frame.size.width-kAlertViewBorder*2, 1000) 
           lineBreakMode:UILineBreakModeWordWrap]; 

     UILabel *labelView = [[UILabel alloc] initWithFrame:CGRectMake(kAlertViewBorder, _height, frame.size.width-kAlertViewBorder*2, size.height)]; 
     labelView.font = messageFont; 
     labelView.numberOfLines = 0; 
     labelView.lineBreakMode = UILineBreakModeWordWrap; 
     labelView.textColor = kAlertViewMessageTextColor; 
     labelView.backgroundColor = [UIColor clearColor]; 
     labelView.textAlignment = UITextAlignmentCenter; 
     labelView.shadowColor = kAlertViewMessageShadowColor; 
     labelView.shadowOffset = kAlertViewMessageShadowOffset; 
     labelView.text = message; 
     [_view addSubview:labelView]; 
     [labelView release]; 

     _height += size.height + kAlertViewBorder; 
    } 

    _vignetteBackground = NO; 
} 

return self; 

}

我试图用这样的

-(void)reloadAlertView: (NSString *) title: (NSString *) message{ 
[self initWithTitle:title message:message]; 
} 

,并从我的课,把这个地方我显示警报视图。

[alert reloadAlertView: title: newMessage]; 
+0

你可以发表一些你在这里尝试的代码吗?顺便说一句你的问题不是很清楚,你究竟想要什么。清楚地说明plz – mAc 2013-02-25 12:19:46

+0

只需显示您的代码,绝对可以按照您的要求进行自定义。 – 2013-02-25 12:21:03

+0

请注意,您不是使用'UIAlertView',而是使用不带'UIAlertView'子类的替代品 - >,因此您的主题和问题文本至少是误导性的。 – Till 2013-02-25 12:38:15

回答

1

你需要在你CustomAlertView.h到REF一个新的标签

@property (nonatomic, strong) IBOutlet UILabel *mylab; 

,那么你可以通过获得这个标签的属性CustomAlertView.h类的对象

BlockAlertView *alert ...; 
alert.mylab.text = @"hello"; 
0
  1. 解决方案(简单,不需要破解BlockAlertView.m) 每当+按钮点击,警报就会消失,再次出现了。

ViewController.m

@implementation ViewController { 


     BlockAlertView *alert ; 
     NSInteger value; 
    } 

    -(void) viewDidLoad { 
     value = 0; 


     [self reloadAlert]; 


    } 


    -(void) reloadAlert { 
     value += 1; 


     __block ViewController* _self = self; 
     alert = [[BlockAlertView alloc] initWithTitle:@"Course1" message:[[[NSNumber alloc] initWithInteger:value ] stringValue]]; 


     [alert setDestructiveButtonWithTitle:@"PLUS" block:^{ 

      [_self reloadAlert]; 


     }]; 
     [alert show]; 

    } 
    } 
  1. 的解决方案,如果你想保持AlertView依然存在,没有弹出。

a。修改BlockAlertView.h以使外部的messageLabelViewViewController访问,以便稍后重新绘制消息。

BlockAlertView.h

@interface BlockAlertView { 
... 
} 
@property (nonatomic, retain) UILabel *messageLabelView; 

你也可以把UIView *_view@protected进入@property相反,如果首选。在这种情况下,messageLabelView可以通过_view的子视图访问

b。修改BlockAlertView.mdismissWithClickedButtonIndex:animated:以禁用removeView函数被调用,如果buttonIndex == PLUS符号按钮 - buttonIndex被硬编码为0

有可能是一个更好的选择,停止加号按钮块OBJ内的执行线程,但我不知道该怎么做:)

℃。在消息标签的呈现期间修改BlockAlert.minitWithTitle:message:以将messageLabelView的引用添加到labelView中。

BlockAlertView.m

@synthesize messageLabelView; 



    - (id)initWithTitle:(NSString *)title message:(NSString *)message 
    { 
    ... 
    // code to initialize messageLabelView 
    if (message) 
      { 

       .... 
       // code to render labelView for message. add reference to messageLabelView 
       messageLabelView = labelView; 
        // [labelView release]; 


      } 
    } 

    - (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated 
    { 
     if (buttonIndex >= 0 && buttonIndex < [_blocks count]) 
     { 
      id obj = [[_blocks objectAtIndex: buttonIndex] objectAtIndex:0]; 
      if (![obj isEqual:[NSNull null]]) 
      { 
       ((void (^)())obj)(); 
      } 
     } 

    // there may be a better option to stop the execution thread inside the block obj above 
     if(buttonIndex == 0) {// or whatever index of Plus Button, dont removeView 
      return; 
     } 

    // code to removeView below, keep as usual 
     if (animated) 
     { 
      ... 
     } 
     else 
     { 
     .... 
     } 
    } 
} 

d。更改reloadAlert在ViewController.m

ViewController.m