gpt4 book ai didi

objective-c - 将 TextField 的 stringValue 从一个类传递到另一个类

转载 作者:行者123 更新时间:2023-12-03 18:00:14 25 4
gpt4 key购买 nike

我有一个用 Xcode 4 编写的适用于 Mac OS X 的 Cocoa 应用程序。该应用程序有一个主窗口,即应用程序委托(delegate)。该窗口有一个按钮,可打开另一个窗口(称为弹出窗口),其中包含 2 个文本字段和几个按钮。当用户单击其中一个按钮时,想法是关闭弹出窗口并从第一个 TextField 中获取文本并在应用程序委托(delegate)上使用它。

我的代码如下。

应用程序委托(delegate).h:

@interface TestAppAppDelegate : NSObject <NSApplicationDelegate> {
NSString *valueofedit;
@private
NSWindow *window;
NSPersistentStoreCoordinator *__persistentStoreCoordinator;
NSManagedObjectModel *__managedObjectModel;
NSManagedObjectContext *__managedObjectContext;
NSTextField *_StatusLabel;
}

@property (assign) IBOutlet NSWindow *window;
@property (nonatomic, retain) NSString *valueofedit;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (assign) IBOutlet NSTextField *StatusLabel;

- (IBAction)GetStatClick:(id)sender;
- (IBAction)OnLaunch:(id)sender;
- (IBAction)saveAction:sender;

@end

代表.m:

#import "TestAppAppDelegate.h"
#import "MyClass.h"

@implementation TestAppAppDelegate
@synthesize StatusLabel = _StatusLabel;
@synthesize valueofedit;
@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
valueofedit = [[[NSString alloc] init] autorelease];
}


- (IBAction)GetStatClick:(id)sender {

// I need to get the value of the pop window textfield here.
}


- (IBAction)OnLaunch:(id)sender {

MyClass *controllerWindow = [[MyClass alloc] initWithWindowNibName:@"pop"];
[controllerWindow showWindow:self];

// this of course is always null
NSString * tmp = [controllerWindow valueofedit];
NSLog(@"result: %@", tmp);

}

@end

OnLaunch 将弹出新窗口。

弹出窗口代码

.h:

@interface MyClass : NSWindowController {
NSString *valueofedit;
@public

NSTextField *one;
NSTextField *two;
NSWindow *popupwin;
}
@property (assign) IBOutlet NSWindow *popupwin;

@property (assign) IBOutlet NSTextField *one;
@property (assign) IBOutlet NSTextField *two;
@property (nonatomic, retain) NSString *valueofedit;

- (IBAction)onclose:(id)sender;

@end

和.m

#import "MyClass.h"
#import "TestAppAppDelegate.h" //try to access the delegate but no luck

@implementation MyClass
@synthesize popupwin;
@synthesize one;
@synthesize two;
@synthesize valueofedit;

// when we hit the "Done" button
- (IBAction)onclose:(id)sender
{
// the value of the textfield that I need
valueofedit = [one stringValue];

// I tried to get the value sent to the app delegate
TestAppAppDelegate *mainwin = [TestAppAppDelegate alloc];

[[mainwin valueofedit] initWithFormat:@"%@", valueofedit];
[popupwin close];
}
@end

所以我的想法是,由于我无法直接访问弹出窗口,所以我尝试在应用程序委托(delegate)上公开一个变量,并在关闭弹出窗口之前复制其中的文本字段的值。没成功。

我该怎么做?如何将一个窗口的文本字段的值传递到另一个窗口?

注意:不,我不能为此使用警报。

代码示例值得赞赏。谢谢。

最佳答案

您正在分配应用程序委托(delegate)的新实例。您应该使用 [NSApp delegate],而不是 [TestApplicationDelegate alloc]

一旦您有了指向实际委托(delegate)的指针,您就没有正确使用访问器来设置 vauleOfEdit 属性。

当前,您正在对访问器的返回值调用 initwithformat,该值要么为零,要么是已初始化的字符串。

将您的 onclose 方法修改为:

// when we hit the "Done" button
- (IBAction)onclose:(id)sender
{
TestAppAppDelegate *mainwin = (TestAppAppDelegate*)[NSApp delegate];

mainwin.valueofedit = [one stringValue];
[popupwin close];
}
@end

关于objective-c - 将 TextField 的 stringValue 从一个类传递到另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com