在点击点上的UIView中添加一个按钮

时间:2009-10-01 07:33:56

标签: iphone uiview touch

您好我试图在用户点击屏幕的位置添加一个按钮。

以下是我的UIView文件中的代码

- (void)drawRect:(CGRect)rect {
    // Drawing code
    NSLog(@"drawRect, %i, %i", firstTouch.x, firstTouch.y);
    [tagButton drawRect:CGRectMake(firstTouch.x, firstTouch.y, 100, 200)];
    [self addSubview:tagButton];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    firstTouch = [touch locationInView:self];

    [self setNeedsDisplay];
}

这是来自firstTouch的日志

2009-10-01 17:27:23.743 text [2521:207] drawRect,0,1080311808

如何获得触摸的x,y点,并在该点上创建一个uibutton?

任何帮助将不胜感激,谢谢


这就是我提出的,它将按钮添加到视图中。但是当我弹出这个视图时,它会崩溃。我似乎无法找到任何问题。任何人都可以看到问题所在吗?

UIButton *newButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [newButton setFrame:CGRectMake(self.firstTouch.x, self.firstTouch.y, width, 17)];
        [newButton setTitle:[textField text] forState:UIControlStateNormal];
        [newButton setFont:[UIFont boldSystemFontOfSize:12]];
        [newButton setShowsTouchWhenHighlighted:YES];
        [newButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [newButton setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
        [newButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
        [newButton setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
        [newButton setBackgroundColor:[UIColor clearColor]];

        UIImage *bgImg = [[UIImage imageNamed:@"button_greyblue.png"] stretchableImageWithLeftCapWidth:15.0 topCapHeight:0.0];
        [newButton setBackgroundImage:bgImg forState:UIControlStateNormal];


        [self setTagButton:newButton];
        [self.view addSubview:tagButton];
        [newButton release];

2 个答案:

答案 0 :(得分:0)

您获得这些值是因为您使用的是%i。

firstTouch.x和.y值实际上是浮点数,所以你应该在NSLog中使用%f。

要添加按钮,您每次都必须分配一个新按钮(专家,如果我错了,请纠正我)。

除此之外,其余代码看起来足够好,可以在点击点上添加按钮。

哦,是的,你可以在touchBegan方法本身获得firstTouch.x和firstTouch.y,并在那里添加一个按钮。

答案 1 :(得分:0)

我认为你不想直接调用drawRect。在touchesBegan中捕获你的touchLocation,然后仍然在touchesBegan中更新你的tagButton的框架。 Apple提供了一个名为MoveMe的示例应用程序,它非常简单,有助于说明这一点。

此外,这些点表示为浮动而不是整数,因此请使用%f而不是%i


回应你的新“问题”:你似乎过度释放了newButton。记住规则......如果你通过alloc,new或copy获得对象,那么你需要释放它。如果没有,那么你没有。所以你的应用程序崩溃了,因为你过度释放了那个按钮。删除 [newButton发布] ,事情应该没问题......