这可能很难解释。
基本上我的项目有以下结构:
我有一个控制其他对象(节点)和(弧)的对象(图形)。
一切都工作得很好,但是我发现需要在我的节点对象中添加按钮。这也正常工作,我有一个NSLog输出让我知道哪个节点已被选中等等。但我的问题是我只想一次选择一个节点。我的节点对象的初始化代码如下:
- (id) initNodeWithData:(NSString *) _label: (int) _xpos: (int) _ypos
{
if(self = [super init])
{
//other variable inits here...
[self setButton: [UIButton buttonWithType:UIButtonTypeCustom]];
[button setImage:[UIImage imageNamed:@"node.png"]
forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"node.png"]
forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"nodeSelected.png"]
forState:UIControlStateSelected];
[button setImage:[UIImage imageNamed:@"nodeSelected.png"]
forState:(UIControlStateHighlighted|UIControlStateSelected)];
[button addTarget:self
action:@selector(buttonPressed)
forControlEvents:UIControlEventTouchUpInside];
}
return self;
}
- (void)buttonPressed
{
NSLog(@"%@ Pressed", label);
if(button.selected == YES) button.selected = NO;
else if(button.selected == NO) button.selected = YES;
}
因为我的节点对象彼此独立,所以我不能(我认为我无论如何)测试是否在选择之前选择了其他任何节点。
理想情况下,我想要类似的东西:
- (void)buttonPressed
{
//Check to see if other nodes are selected
//If not, button.selected = yes
//else clear other buttons
//then select current button
}
但我认为我需要在我的viewController类中使用此代码,其中所有其他代码都是,而且我不知道该怎么做,因为我认为它全部超出了范围。
对不起,这不是很清楚,很难解释!
答案 0 :(得分:0)
您可以拥有一些存储当前所选节点的对象。如果用户按下按钮,则会向该“主”对象发送NSNotification。
MasterObject.h
Node *currentlyActiveNode;
MasterObject.m
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(activateNode:) name:kNotificationActivateNode object:nil];
...
- (void)activateNode:(NSNotification *)notification {
Node *requestingNode = (Node *)[notification.object];
if (requestingNode != currentlyActiveNode) {
[currentlyActiveNode deactivate];
currentlyActiveNode = requestingNode;
[requestingNode activate];
}
}
Node.m
- (void)requestActivation {
[[NSNotificationCenter defaultCenter] postNotificationName:name:kNotificationActivateNode object:self];
}
- (void)activate {
//Whatever...
}
- (void)deactivate {
//Whatever...
}
您的'图表'可能是您的主对象......
替代方案:您甚至可以在侦听“停用”通知的每个节点中拥有一个NSNotification观察器。然后,如果有人单击按钮,您将执行的操作就是发送该通知(节点通过停用来监听和响应),然后激活当前节点。为了确保这两个事件不会干扰,您可以发送对发送节点的引用,如果sender == receiver,则不会停用。