gpt4 book ai didi

ios - 制作由多个 View Controller 调用的自定义数字键盘类

转载 作者:行者123 更新时间:2023-12-01 19:04:22 25 4
gpt4 key购买 nike

我是 Objective-c 和 iOS 编程的新手。我想使用自定义数字键盘进行游戏输入。有几种类型的游戏(game1 game2 game3),游戏可能需要更多或更少的数字显示在数字键盘(控件)上。
每个游戏规则和显示属性都写在单独的 View Controller 类中。我尝试将数字键盘的副本从 game1 剪切并粘贴到其他 Controller 。它抛出一个错误(在构建时),说我正在使用的数字按钮属性的名称已经被使用。

这是否需要我重命名和重新链接每个游戏的所有对象和属性。对我来说太多的维护开销。所以我一直在尝试制作一个源自 NSObject 的 NumPad 类.
这工作正常,直到我尝试从非 View Controller 类创建 View /容器 View 。我在 game1 View Controller 的 viewdidload 部分实例化小键盘对象。这就是我到目前为止所拥有的。

.h 文件

#import <Foundation/Foundation.h>
#import "NumberPadTestAppDelegate.h"

@interface NumPad : NSObject


-(void)numberPadSetUp: (int) numberOfButtons;

@end

.m 文件
#import "NumPad.h"

@implementation NumPad

-(void)numberPadSetUp: (int) numberOfButtons
{
// Instantiate a Container View by code??? test.
CGRect frame = CGRectMake(14, 47, 740, 370);
UIView *Mycontainer = [[UIView alloc] initWithFrame:frame];
Mycontainer.backgroundColor = [UIColor blueColor];
[Mycontainer addSubview:Mycontainer];

// This was here for testing before adding the above four lines.
for (int a = 1; a < numberOfButtons +1; a++)
{
NSLog(@"Button %i has been added.",a);
}
NSLog(@" ");
NSLog(@"Numberpad setup is complete.");
} // End of "numberPadSetUp" routine.

@end

来自 game1 测试 Controller 的 .m 文件
#import "NumberPadTestViewController.h"

@interface NumberPadTestViewController ()

@end

@implementation NumberPadTestViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

NumPad *MyNumberPad =[[NumPad alloc]init];

[MyNumberPad numberPadSetUp:9];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

@end

此代码给出了书面的运行时错误。
int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([NumberPadTestAppDelegate class]));
}
}

我还想知道在 IB 中使用容器 View 控件是否可以完成任务,或者我是否会遇到与以前相同的命名错误?
我在这里想念什么?

最佳答案

问题出在这一行

[Mycontainer addSubview:Mycontainer];

您正在声明 Mycontainer并将其添加到自身。你应该像下面这样写类
#import "NumPad.h"

@implementation NumPad

#define kButtonWidth 50
#define kButtonHeight 15
#define kPadding 20

-(void)numberPadSetUp: (int) numberOfButtons
{
// Instantiate a Container View by code??? test.
// This was here for testing before adding the above four lines.
int xPos = 0;
int yPos = 0;
for (int a = 1; a < numberOfButtons +1; a++)
{
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeSystem];
CGRect aButtonFrame = CGRectMake(xPos, yPos, kButtonWidth, kButtonHeight);
aButton.frame = aButtonFrame;
[aButton setTitle:[NSString stringWithFormat:@"%d",a] forState:UIControlStateNormal];
[self addSubview:aButton];

xPos+=kButtonWidth+kPadding;

if(fmod(a, 3)==0){
yPos+=kButtonHeight+kPadding;
xPos = 0;
}


NSLog(@"Button %i has been added.",a);
}
NSLog(@" ");
NSLog(@"Numberpad setup is complete.");
} // End of "numberPadSetUp" routine.


@end

在你的主要类(class)中
NumPad *MyNumberPad =[[NumPad alloc]initWithFrame:CGRectMake(14, 47, 740, 370)];
[MyNumberPad numberPadSetUp:9];
[self.view addSubview:MyNumberPad];
[self.view bringSubviewToFront:MyNumberPad];

这将为您提供类似于 iOS6/iOS7 中的以下图像的结果

iOS6 iOS7

关于ios - 制作由多个 View Controller 调用的自定义数字键盘类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20701644/

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