如何将数据附加到标签

时间:2012-02-16 20:13:35

标签: ios objective-c view label

我一直关注iTunes U上的Stanford iOS开发视频, 但是我遇到了问题!

我正在构建一个计算器,其中一个任务是将所做的操作等发送到一个标签,该标签基本上记录所有按下的数字和操作。

在我的程序中,这应该在每次单击按钮时发生(我已经完成)。

但是由于某种原因我无法将数据发送到另一个视图控制器中的标签。

这是我用来测试它是否可以在同一视图中工作,而且确实如此。

self.memoryDisplay.text = [self.memoryDisplay.text stringWithAppendingString:digit];

所以我认为导入第二个视图控制器,在第二个视图中声明属性标签,在主视图中合成并使用它发送。

self.secondview.memoryDisplay.text = [self.memoryDisplay.text stringWithAppendingString:digit];

然而,这不起作用,任何人都知道一种简单的方法吗?

2 个答案:

答案 0 :(得分:0)

不确定我完全理解。但是,为什么要尝试直接从不是所有者的视图控制器更新视图?那令人费解。根据您的需求,还有其他方法可以跨视图共享数据 - 最简单的方法是为全局数据定义单例。

答案 1 :(得分:0)

当我们需要向其他视图/视图控制器发送更新时,我们通过NSNitificationCenter使用通知。

在具有另一个视图需要的信息的视图中,我们执行以下操作:

       // Setup Dictionary to contain values we want to pass.
       NSMutableDictionary *theUserInfo = [[[NSMutableDictionary alloc] initWithCapacity:1] autorelease];
       // Add our Objects to the Dictionary with a Key to get them out
        [theUserInfo setObject:self forKey:@"ElementWithGesture"];

        NSValue * pointAsObject = [NSValue valueWithCGPoint:translation];
        [theUserInfo setValue:pointAsObject forKey:@"PanTranslation"];
        [theUserInfo setObject:gestureRecognizer forKey:@"TheGestureRecognizer"];

            // Post the Group Pan Notification.
        [[NSNotificationCenter defaultCenter] postNotificationName:kNCSEGroupPanGesture
                                                            object:nil 
                                                          userInfo:theUserInfo];            

然后在需要信息的视图中我们添加代码告诉Notification Center我们对特定通知感兴趣:

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(groupHandlePanGesture:)  // routine that will handle notification
                                                 name:kNCSEGroupPanGesture 
                                               object:nil];

然后您需要实际处理已发布通知的方法:

-(void) groupHandlePanGesture:(NSNotification*)notification{

       // unpack our objects from the dictionary
IoUIScreenElement *element = (IoUIScreenElement *)  [[notification userInfo] objectForKey:@"ElementWithGesture"];  

if ([self canPan] && ![self elementLocked]) {
       // unpack our pointVlue
    NSValue *pointValue = [[notification userInfo] valueForKey:@"PanTranslation"]; 
    CGPoint translation = [pointValue CGPointValue];

    if (IOFNOTEQUAL(self, element)  & [self isSelected]){
        CGFloat xPosition = self.frame.origin.x + translation.x;
        CGFloat yPosition = self.frame.origin.y + translation.y;

        [self setOrigin:CGPointMake(xPosition, yPosition)];
    }
}
}

然后,在完成收听通知时,您想要删除您的观察者。根据您的观点,这通常在delloc中完成。

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:kNCSEGroupPanGesture
                                                  object:nil];