2012-02-16 107 views
0

我一直在关注iTunes U上的斯坦福iOS开发视频, 但是我遇到了问题!如何将数据追加到标签

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

在我的程序中,每次点击按钮时都会发生这种情况(我已经完成)。

但是我不能因为某种原因将数据发送到另一个视图控制器中的标签。

这是我用来测试它是否可以在相同的视图中工作,并且它可以。

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

所以我想生病进口第二视图控制器,在第二视图声明属性标签,在主视图合成和使用发送。

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

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

+1

什么不行?你有错误吗?也许在这些代码行所在的位置添加更多的上下文。 – picciano 2012-02-16 20:30:03

回答

0

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

+0

这是因为每次用户点击一个按钮时,我想显示用户在不同屏幕上的标签中点击的内容。基本上记录了用户输入的内容和我在主视图中的方法,它检查按钮按下并更新主视图上的标签以及用户输入的内容(如真实计算器)我认为最简单的方法是使用相同的技术 – user1214037 2012-02-16 21:20:57

+0

为什么你不只是在一个单一的视图控制器管理的单一屏幕上拥有所有的视图(UILabel,UIButton等)?我希望计算器能够在一个屏幕上输入命令并查看结果。如果您正在查找命令记录,只需将其存储在某个数据结构(例如文件)中,然后在加载时从其他视图访问它们。 – rajagp 2012-02-16 21:37:33

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];    

然后具体通知:

[[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];