Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何从另一个控制器访问UILabel IBOutlet中的文本?_Objective C_Ios_Xcode - Fatal编程技术网

Objective c 如何从另一个控制器访问UILabel IBOutlet中的文本?

Objective c 如何从另一个控制器访问UILabel IBOutlet中的文本?,objective-c,ios,xcode,Objective C,Ios,Xcode,我的程序是一个简单的计算器。主视图连接到计算器底部的CalcViewController.h/.m,子视图顶部的100个点通过按钮显示。当用户单击显示的子视图按钮时,子视图的其余部分会向上滑动到标签的底部,其中显示输入编号。子视图(AdvancedView)上现在只有一个按钮(sqrt)。当按下此键时,我希望获得标签中当前的数字,并将其发送到模型,以对其执行平方根法。我唯一的问题是UILabel IBOutlet*显示设置在我的CalViewController中,而不是我也需要它的Advanc

我的程序是一个简单的计算器。主视图连接到计算器底部的CalcViewController.h/.m,子视图顶部的100个点通过按钮显示。当用户单击显示的子视图按钮时,子视图的其余部分会向上滑动到标签的底部,其中显示输入编号。子视图(AdvancedView)上现在只有一个按钮(sqrt)。当按下此键时,我希望获得标签中当前的数字,并将其发送到模型,以对其执行平方根法。我唯一的问题是UILabel IBOutlet*显示设置在我的CalViewController中,而不是我也需要它的AdvancedView中。我试着将CalcViewController.h导入我的AdvancedView.h,然后合成一个指向CalcViewController的*mainView指针,但是当我调用

    double currentText = [self.mainView.display.text doubleValue];
在我的高级视图中,如果显示中有一个数字,则仍然获取0.000000。我也在网上搜索了很多解决方案,不断遇到协议,但我似乎无法完全理解这个概念。回到我的问题:如何从另一个控制器类访问UILabel IBOutlet*显示中的文本?以下是我正在使用的代码:

CalcViewController.h

#import <UIKit/UIKit.h>
@interface CalcViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *display;
@end
AdvancedView.h

#import <UIKit/UIKit.h>

@interface AdvancedView : UIView
@end

注意:我不想再占用model类的屏幕,所以我把它删掉了。这只是一个典型的模型。

您现在正在做的是在AdvancedView中创建CalcView控制器的新视图

用简单的语言概括一下

  • 您查看了CalcViewController。。比方说
  • 然后在AdvancedView中创建一个新的CalcView控制器(\u mainView) 比如说B
  • 您需要的是..中文本的值。。但是你得到的是价值 其显示标签没有值
  • 您需要做的是使CalcViewController成为单例

    这是在应用程序生命周期中仅生成CalcViewController的一个对象

    在CalcViewController.m中,在导入语句之前添加

     static CalcViewController *view;
    
    然后添加一个方法(在.h文件中声明…在m中定义)

    现在就用

    double currentText = [[CalcViewController getCalcViewController].display.text doubleValue];
    

    你的答案的第一部分现在完全有道理了。但我在导入的上面添加了静态CalcViewController*视图,得到了错误:未知类型名。然后,我向advancedView.h声明了getCalcViewController类方法,结果出现错误:应为类型。当我在.m中定义getCalcViewController时,我得到一个错误:使用未定义的标识符“view”。至于“视图”错误,我猜我需要在AdvancedView中声明该属性。其他错误呢?好的..在CalcViewController.m中的import语句之后添加静态CalcViewController*视图我把它与本机iOS数据类型混淆了。。这样做..然后按照回答中的其余步骤进行确定,我消除了所有错误,但是当我在标签中输入9,点击高级功能按钮以显示高级视图并点击sqrt按钮时,0.000仍然被分配给currentText:double currentText=[[CalcViewController getCalcViewController].display.text doubleValue];NSLog(@“%f”,currentText);在双currentText=。。。。。尝试更新其值。。。。也就是说,做相反的操作。更改其文本,然后获取值。。看看它是否仍然是0.0
     static CalcViewController *view;
    
    + (CalcViewController *) getCalcViewController;
    {
        if (view == nil)
        {
            view = [[CalcViewController alloc] init];
        }
    
        return view;
    }
    
    double currentText = [[CalcViewController getCalcViewController].display.text doubleValue];