2010-10-25 79 views
0

这可能很难解释。按钮按下方法位置

基本上我有以下结构到我的项目:

我有一个对象(图形),其控制其他对象(节点)和(弧)。

一切工作正常,但我发现需要添加按钮到我的节点对象。这也工作得很好,我有一个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

您可能有一些存储当前选定节点的对象。如果用户按下按钮,则向该“主”对象发送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观察者。那么如果有人点击一个按钮,你会做什么只是简单地发送该通知(节点通过停用侦听并作出反应),然后激活当前节点。为了确保这两个事件不会发生干扰,可以发送一个对发送节点的引用,并且如果发送方==接收方不会停用。

+0

得到它的工作! :)我想我做了你提出的另一种方法,我对客观C很陌生,所以我不得不做一些关于NSNotification的例子,以及如何使用它,但现在它效果很好! :)非常感谢您的帮助,对您的赞美先生! – 2010-10-26 11:43:49