[英]How to programmatically add a subview
首先,我對IOS編程很陌生。 我正在做一個項目,遇到了一個問題。
我想以編程方式在“表”視圖上添加“球”子視圖,但是,該球不會顯示。 程序僅顯示表格。 什么原因? 在此先感謝,這是我的文件:
表.m
//
// Table.m
// Lines
//
// Created by Eduard Avetisyan on 1/24/15.
// Copyright (c) 2015 Eduard Avetisyan. All rights reserved.
//
#import "Table.h"
#import "Constants.h"
@implementation Table
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if(self)
{
[self addBall];
}
return self;
}
- (void)addBall
{
Ball* myBall = [[Ball alloc]init];
[self.window addSubview:myBall];
myBall.center = self.window.center;
[self.window bringSubviewToFront:myBall];
}
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
CGContextSetLineWidth(context, 2.0f);
for (int i = 0;i <= TABLE_LENGTH; i++)
{
//draw rows
CGContextMoveToPoint(context, BORDER_DISTANCE +i * CELL_LENGTH, BORDER_DISTANCE);
CGContextAddLineToPoint(context, BORDER_DISTANCE + i * CELL_LENGTH, BORDER_DISTANCE + CELL_LENGTH * TABLE_LENGTH);
CGContextStrokePath(context);
//draw columns
CGContextMoveToPoint(context, BORDER_DISTANCE, BORDER_DISTANCE + i * CELL_LENGTH);
CGContextAddLineToPoint(context, BORDER_DISTANCE + CELL_LENGTH * TABLE_LENGTH, BORDER_DISTANCE + i * CELL_LENGTH);
CGContextStrokePath(context);
}
}
@end
球
//
// Ball.m
// Lines
//
// Created by Eduard Avetisyan on 1/24/15.
// Copyright (c) 2015 Eduard Avetisyan. All rights reserved.
//
#import "Ball.h"
@implementation Ball
-(instancetype)init
{
self = [super init];
if (self) {
CGRect newFrame = self.frame;
newFrame.size.width = 50;
newFrame.size.height = 50;
[self setFrame:newFrame];
Colors color = arc4random_uniform(NUMBER_OF_COLORS);
[self drawBall:color];
}
return self;
}
-(void)drawBall:(Colors)color
{
switch (color) {
case red:
self.fillColor = [UIColor redColor].CGColor;
break;
case green:
self.fillColor = [UIColor greenColor].CGColor;
break;
case yellow:
self.fillColor = [UIColor orangeColor].CGColor;
break;
case blue:
self.fillColor = [UIColor blueColor].CGColor;
break;
default:
break;
}
}
-(void)setFillColor:(CGColorRef)fillColor
{
_fillColor = fillColor;
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, self.fillColor);
CGContextSetStrokeColorWithColor(context, [UIColor greenColor].CGColor);
CGContextFillEllipseInRect(context, rect);
CGContextStrokeEllipseInRect(context, rect);
}
@end
常數h
//
// Constants.h
// Lines
//
// Created by Eduard Avetisyan on 1/24/15.
// Copyright (c) 2015 Eduard Avetisyan. All rights reserved.
//
#ifndef Lines_Constants_h
#define Lines_Constants_h
#define TABLE_LENGTH 10
#define CELL_LENGTH 30
#define BORDER_DISTANCE 5
#define NUMBER_OF_COLORS 4
typedef enum {
red,
green,
yellow,
blue,
black,
orange,
violet
}Colors;
#endif
在addBall
方法中,您addBall
新的Ball
對象添加到self.window
。 您應該將其添加到self
。 而且您不需要調用bringSubviewToFront:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.