0

我想创建一个自定义类,该类将根据某些输入UIView显示动态数量的对象。UISegmentedControl例如,如果客户的购物车中有 5 个产品,则UIView应该生成 5 个UISegmentedControl对象,然后我将与每个项目链接。

我遇到的问题是让它在UIView. 这是我到目前为止所做的。我成功地创建了一个UISegmentedControl对象并在我的 main 中以编程方式显示它UIViewControllerUIView将它添加到我的班级时,我没有得到任何显示。这是UIView该类的实现代码:

#import "ajdSegmentView.h"

@implementation ajdSegmentView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        NSArray *itemArray = [NSArray arrayWithObjects:@"Yes", @"No", nil];

        UISegmentedControl *button = [[UISegmentedControl alloc] initWithItems:itemArray];
        button.frame = CGRectMake(35,44, 120,44);
        button.segmentedControlStyle = UISegmentedControlStylePlain;
        button.selectedSegmentIndex = 1;

        [self addSubview:button];
    }
    return self;
}
@end

我通过 Storyboard 创建了一个新UIView对象并将其放置在UIViewController场景中。我确保将类从通用UIView类设置为我的新自定义类。UIView我在UIViewController课堂上添加和出口。这是实现内部的代码UIViewController

#import "ajdViewController.h"

@interface ajdViewController ()

@end

@implementation ajdViewController

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

    self.segmentView = [[ajdSegmentView alloc] init];
}

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

@end

这就是我所尝试的。我一直在搜索很多页面并尝试在没有在这里询问的情况下实现这一点,但我似乎在寻找错误的地方。

4

2 回答 2

1

首先您需要检查 ajdSegmentView 是UIVIew还是UIViewController. 如果是就好了UIView。如果是 UIViewController 类型,则需要在添加 Segment 时添加此行。

[self.view addSubview:button];

代替:

[self addSubview:button];

还有一件事您在分配后忘记将此视图添加到您的主视图中,因此您可以像这样声明:

objajdSegmentView = [[ajdSegmentView alloc] init];
[self.view addSubview:objajdSegmentView.view];

我刚刚添加了这个东西。我得到了这样的结果。在此处输入图像描述

希望这对你有用。

于 2013-01-19T20:17:15.757 回答
0

您正在使用该init方法初始化自定义视图,但您的 ajdSegmentView 初始化在您的initWithFrame:方法中(在您的情况下没有被调用)。

所以替换:

self.segmentView = [[ajdSegmentView alloc] init];

和:

// Change the frame to what you want
self.segmentView = [[ajdSegmentView alloc] initWithFrame:CGRectMake(0,0,100,40)];

也不要忘记将您的视图添加到视图控制器的视图中。

[self.view addSubview:self.segmentView];

除非此视图是使用界面生成器创建的,否则您将需要initWithCoder:在您的 ajdSegmentView 类中进行覆盖。

虽然我不熟悉情节提要,所以也许我遗漏了一些东西,但在标准情况下,我上面所说的将解决你的问题。

于 2013-01-19T19:55:12.397 回答