我想知道如何将userInfo对象或任何NSDictionary添加到UIAlertView?
谢谢。
发布于 2012-01-24 17:37:37
如果你使用的是> iOS 4.0 (对于块),并且你只想要一个或两个按钮,你可以使用我创建的这个类别:
https://github.com/rsaunders100/UIAlertView-Blocks
它绕过了添加用户信息的需要,因为您将单击处理函数直接放入警报中。例如:
#import UIAlertView+Blocks.h
...
...
NSString* myUserInfo = @"example";
[UIAlertView displayAlertWithTitle:@"Example Alert View With Blocks"
message:nil
leftButtonTitle:@"Ok"
leftButtonAction:^{
NSLog(@"%@", myUserInfo);
}
rightButtonTitle:nil
rightButtonAction:nil];
发布于 2011-03-12 09:13:16
您可以尝试将UIAlertView子类化以添加字段,或者将引用存储在委托类中。但是,将任何对象附加到任何其他对象的最通用方法是使用objc_setAssociatedObject
。
为此,您必须使用#import <objc/runtime.h>
,并且需要一个用作键的任意void *
(通常的技巧是在.m文件中声明一个static char fooKey;
并使用它的地址)。然后,可以像这样附加对象:
objc_setAssociatedObject(alertView, &fooKey, myDictionary, OBJC_ASSOCIATION_RETAIN);
在这种情况下,myDictionary将在alertView的生命周期内保留,并在释放alertView时释放。
要在以后检索关联的对象,请使用逻辑命名的objc_getAssociatedObject
。
NSDictionary *myDictionary = objc_getAssociatedObject(alertView, &fooKey);
如果没有设置关联,则返回nil
。要打破关联,只需使用objc_setAssociatedObject
为相同的对象和键关联一个新值;可以使用nil
来断开关联,而不关联新对象。
除了OBJC_ASSOCIATION_RETAIN之外,here还列出了关联类型的其他值。
发布于 2014-01-21 00:00:51
我想出了一个更简单的解决方案,它可能适用于某些情况。因为在调用委托时会获得NSAlertView上下文,所以我使用对象的实际地址来创建标记(NSString*),然后使用该标记在全局或特定于对象的NSDictionary中存储自定义值。下面是一个示例:
+(NSString*)GetTag:(id)ObjectIn
{
return [NSString stringWithFormat:@"Tag-%i",(int)ObjectIn];
}
在委派中:
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString* MyID = [CommandManager GetTag:alertView];
[CurrentActiveAlerts removeObjectForKey:MyID];
}
呼叫:
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:title_text
message:@""
delegate:self
cancelButtonTitle:nil
otherButtonTitles:button_text ,nil];
CurrentActiveAlerts[[CommandManager GetTag:myAlert]] = CommandToRun;
[myAlert show];
[myAlert release];
密钥最终将看起来像"Tag-226811776“。希望这能有所帮助。
https://stackoverflow.com/questions/5279884
复制相似问题