- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问了一些问题后,我学会了如何将命令从一个 View Controller 发送到另一个 View Controller ,并设法编写了可以正常工作的代码,但没有任何反应......
在我的项目中,我有两个名为 sayfa1
和 sayfa23
的 View Controller 。单击 sayfa1
上的按钮时,它会打开 sayfa23
并在标签上书写(随机打招呼,请参阅下面的代码)但它没有发生。在模拟器上,该按钮只会打开 sayfa23
并且标签没有任何变化。如果您查看代码,您会更好地理解它。
sayfa1.h
#import <UIKit/UIKit.h>
@protocol sayfa1Delegate <NSObject>
- (void)dealWithButton1;
@end
@interface sayfa1 : UIViewController
@property(nonatomic,assign) id<sayfa1Delegate> delegate;
@end
sayfa1.m
#import "sayfa1.h"
@interface sayfa1 ()
@end
@implementation sayfa1
@synthesize delegate;
-(IBAction)button
{
[delegate dealWithButton1];
}
@end
sayfa23.h
#import <UIKit/UIKit.h>
#import "sayfa1.h"
@interface sayfa23 : UIViewController <sayfa1Delegate>
{
IBOutlet UILabel *label;
sayfa1 *vc1 ;
}
@end
sayfa23.m
#import "sayfa23.h"
#import "sayfa1.h"
@interface sayfa23 ()
@end
@implementation sayfa23
- (void)dealWithButton1
{
vc1.delegate = self;
int random_num;
random_num = (arc4random() % 5 - 1) + 1;
if (random_num == 1)
{
label.text = @"hello1";
}
else if (random_num == 2)
label.text = @"hello2";
else if (random_num == 3)
label.text = @"hello3";
else if (random_num == 4)
label.text = @"hello4";
}
@end
写完这段代码后,我将按钮连接到 sayfa23
,这样它就会打开新页面,我还将该按钮连接到 sayfa1
以接收按钮操作,我连接了标签 (在 sayfa23
) 到 sayfa23
接收标签订单。但正如我所说,什么都没有发生,没有错误,也没有你好,我做错了什么?我在我的一些 h 文件的顶部导入了 sayfa1.h
或 sayfa23.h
导致 Xcode 给我一个关于未定义的错误并解决了这个问题,但这是我的错误吗或其他东西。
我想要的例子。
用户打开应用
sayfa1
显示在屏幕上
用户点击按钮并显示 sayfa23
sayfa23
上的标签文本被位于 sayfa1
的按钮更改写随机 hello1..2..3 等...
我做错了什么?
最佳答案
重读你的问题,你问你的第一个 View Controller 如何打开第二个 View Controller 并设置一个文本框。如果那确实是您要尝试做的事情,那么这是一个简单得多的问题,根本不需要委托(delegate)协议(protocol)或委托(delegate)。
前两个答案是根据代表的讨论得出的,但那是为了解决不同的问题。仅当您需要第二个 Controller 将某些内容传递回第一个 Controller 时才需要委托(delegate)。但是如果你只是想让你的第二个 Controller 从第一个 Controller 接收一些东西,那就很简单了:
// FirstViewController.h
#import <UIKit/UIKit.h>
@interface FirstViewController : UIViewController
@end
实现如下:
// FirstViewController.m
#import "FirstViewController.h"
#import "SecondViewController.h"
@implementation FirstViewController
- (NSString *)generateRandomText
{
NSString *result;
int random_num;
random_num = (arc4random() % 5 - 1) + 1;
if (random_num == 1)
result = @"hello1";
else if (random_num == 2)
result = @"hello2";
else if (random_num == 3)
result = @"hello3";
else if (random_num == 4)
result = @"hello4";
return result;
}
// if you're using NIBs, it might be something like...
// you only need this method if you're using NIBs and you've manually hooked a button up to this
// if you're using segues, get rid of `goToNextViewController` and just use the following `prepareForSegue
- (IBAction)goToNextViewController:(id)sender
{
SecondViewController *secondController = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil];
secondController.textFromParent = [self generateRandomText];
[self.navigationController pushViewController:secondController animated:YES];
}
// if you're using segues, give your segue an identifier, e.g. toSecondViewSegue, in Interface Builder and reference the exact same identifier here
// if you're not using segues, you don't need this prepareForSegue method
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"toSecondViewSegue"])
{
SecondViewController *destinationController = segue.destinationViewController;
destinationController.textFromParent = [self generateRandomText];
}
}
@end
你的第二个 Controller 可能看起来像:
// SecondViewController.h
#import <UIKit/UIKit.h>
@interface SecondViewController : UIViewController
@property (strong, nonatomic) NSString *textFromParent;
@property (weak, nonatomic) IBOutlet UILabel *label;
@end
实现如下:
// SecondViewController.m
#import "SecondViewController.h"
@implementation SecondViewController
@synthesize textFromParent = _textFromParent;
@synthesize label = _label;
- (void)viewDidLoad
{
[super viewDidLoad];
self.label.text = self.textFromParent;
}
@end
关于ios - 使用委托(delegate)在 View Controller 之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632043/
大多数语言都支持双向进程通信。例如,在 Python 中,我可以(草率地)执行以下操作: >>> from subprocess import * >>> p = Popen('nslookup',
致力于使用 C++ 在 arduino 和 PC (Win 7) 之间进行通信。使用 WriteFile 和 ReadFile 创建通信或简单地发送或接收数据没有问题。但是当我想以某种方式“协调”沟通
我们正在开发一个基于微服务的应用程序。它们将使用 Helm Package Manager 部署到 kubernetes,并且它们都存储了自己的存储库和 helm chart。以下是我们微服务的名称。
我正在开发一个大型 MVVM 应用程序。我为此使用了 MVVM 轻量级工具包。该应用程序就像一个带有后退和前进按钮的网络浏览器。主视图是一个用户控件。我在主视图用户控件中放置了后退和前进按钮。主视图又
我在 java 和 freepascal(lazarus) 应用程序之间的通信有问题。我使用套接字。它们正确连接。一切都很顺利,直到我想从一个应用程序向另一个应用程序发送一些东西。在java而不是“a
我已经使用客户端套接字和服务器套接字使用C#编写了群聊。 当我使用VS 2017在自己的PC中运行程序(服务器和客户端)时,客户端和服务器之间的通信工作正常。 当我在笔记本电脑中运行客户端程序,并在自
Kubernetes 中两个不同 Pod 之间的通信是如何发生的? 就我而言,我有两个 Pod:前端和后端,它们都有不同的容器。 我希望我的前端 pod 与后端 pod 通信,但我不想使用后端 pod
我正在尝试在浏览器中嵌入的 flash 实例与在 C# WinForms 应用程序中运行的 flash 实例之间进行通信...我收到一个编译错误,内容为: 1119 Access of possibl
鉴于网络上缺乏信息,请问一个问题:我要在 Android 中创建一个应用程序,使用一个数据库应用程序 rails 。为此,我需要一个手动 session 。所以如果有人准备好了示例/教程显示通信 an
我正在编写一个应用程序,它将通过 MySQL 数据库对用户进行身份验证。我已经用 Java (android) 编写了它,但现在正在移植到 Windows 手机。 PHP 文件使用 $get 然后回显
是否可以通过互联网在两个不同设备上的两个不同应用程序之间建立通信。我想从设备 A 上的应用程序点击一个设备 B 上的应用程序,然后从设备 B 上的应用程序获取数据到设备 A 上的应用程序。如果可能,如
这是脚本: 它被放置在其他网站上。 com 并显示一个 iframe。如果有人点击 iframe 中的某个内容,脚本应该将一个 div 写入 othersite 。 com. 所以我的问题是如何做到
你好我是 php 的新手,我用 c++ 编写了整个代码并想在 php 中使用这段代码。所以我为我的代码制作了 dll 以使用它。但是我不能在 php 中使用这个 dll,可以谁能给我完整的代码来使用
我确定之前已经有人问过(并回答过)此类问题,所以如果是这样,请将我链接到之前的讨论... 在 C++ 中,假设我有一个 ClassA 类型的对象,其中包含一个 ClassB 类型的私有(private
我正在尝试使用 ATmega32 进行串行通信。首先,我使用 RS232,使用 USB-to-RS232 建立使用串行终端的接收和传输(在我的例子中是 tera 术语)。无论我从串行终端 Atmega
我找不到适用于 Ruby 的 SSL 实现。 我的部分项目需要服务器和客户端之间的安全通信链接,我希望为此使用 SSL 以创建安全 session 。 谢谢 最佳答案 如果你使用 Ruby 1.9.x
我正在尝试在客户端/服务器之间进行 SSL 通信。 到目前为止,我已经从 keystore 创建了 java.security.cert.X509Certificate。接下来我应该怎么做才能使这次沟
我在与 Windows 上的 USB 设备 通信时遇到问题。我不能使用 libusb 或 WinUSB,因为我有一个特定的驱动程序(Silabs USB 到 UART,这是一个 USB 到串口的桥接器
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我发现 xcom 实际上是将数据写入数据库并从其他任务中提取数据。我的数据集很大,将其腌制并写入数据库会导致一些不必要的延迟。有没有办法在不使用 xcom 的情况下在同一 Airflow Dag 中的
我是一名优秀的程序员,十分优秀!