2015-01-11 3 views
0

Привет и спасибо заранее для вас поддерживает :)функция UIButton не называется

Так что я делаю: 1. создать представление прокрутки и добавить его в главном окне 2. затем свитка view добавьте еще один UIView, размер которого равен прокрутке; 3. и в UIView добавьте программно созданную кнопку для ведьмы. Я также добавляю: тег, изображение, размер программно.

Порядок добавления (родительство) объектов: UIView-> UIScrollView-> UIView-> UIButton

А вот код, я использую:

#import "ViewController.h" 

@interface ViewController() 
{ 
    UIButton *button; 
    UIView *buttonHolderView; 
} 
@end 

@implementation ViewController 

@synthesize scroll; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    //scroll view is added using storyboards 
    [scroll setScrollEnabled:YES]; 
    [scroll setContentSize:CGSizeMake(1840, 1752)]; 
    scroll.bounces = NO; 
    [scroll setBackgroundColor:[UIColor blackColor]]; 
    //UPDATE 4 
    //here changed to integer coordinates and now it works 
    buttonHolderView = [[UIView alloc] initWithFrame:CGRectMake(scroll.frame.origin.x, scroll.frame.origin.y, scroll.frame.size.width, scroll.frame.size.height)]; 
    [buttonHolderView setBackgroundColor:[UIColor blueColor]]; 
    [scroll addSubview:buttonHolderView]; 

    NSString *title = @""; 
    int tagForTheButton = 0; 

    button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.adjustsImageWhenHighlighted = NO; 
    button.frame = CGRectMake(xPossition, yPossition, 200, 64); 
    button.tag = tagForTheButton; 
    [button setTitle:title forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [buttonHolderView addSubview:button]; 
    [button setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"Tile.png"]] forState:UIControlStateNormal]; 
    //other scroll and pinch gesture adjustments 
    //UPDATE WITH CODE FOR PINCH AND SCROLL 


    [scroll setUserInteractionEnabled:YES]; 
    UIPinchGestureRecognizer *pitchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePitch:)]; 
    [scroll addGestureRecognizer:pitchGestureRecognizer]; 

    imageMaxScale = 1.1; 
    imageMinScale = 0.2; 
    imageCurrentScale = 1.0; 



    yMyCharacterFrame = 200; 
    xMyCharacterFrame = 200; 
    myCharacterFrame = [[UIImageView alloc]init]; 
    myCharacterFrame.frame = CGRectMake(xMyCharacterFrame, yMyCharacterFrame, 100, 100); 
    myCharacterFrame.image = [UIImage imageNamed:@"image0.png"]; 
    [myCharacterFrame setUserInteractionEnabled:YES]; 
    [scroll addSubview:myCharacterFrame]; 
} 

-(void)handlePitch:(UIPinchGestureRecognizer *) pinchGesture{ 

    if (imageCurrentScale * [pinchGesture scale] > imageMinScale && imageCurrentScale * [pinchGesture scale] <imageMaxScale) { 
     imageCurrentScale = imageCurrentScale * [pinchGesture scale]; 
     CGAffineTransform zoomTransform = CGAffineTransformMakeScale(imageCurrentScale, imageCurrentScale); 
     [[pinchGesture view] setTransform:zoomTransform]; 
    } 


    [pinchGesture setScale:1.0]; 
    CGRect scrollFrame; 
    scrollFrame.origin = _mainViewHolder.frame.origin; 
    scrollFrame.size = CGSizeMake(568, 320); 
    scroll.frame = scrollFrame; 

} 

-(void)buttonPressed:(UIButton *)sender{ 
    NSLog(@"button pressed"); 
} 

Кнопка рисуется на экране, но когда я пытаюсь нажать на него, он не входит в функцию buttonPressed (не NSLog).

Любые предложения? Также я не понял, на что ссылается addTarget (я прочитал документацию на яблоко).

UPDATE 2: Если я добавлю кнопку в вид прокрутки, а не только ее отображение, но я также могу нажать ее.

ОБНОВЛЕНИЕ 3: Я ПОЛУЧИЛ: po [прокрутка рекурсивного описания]. Он вернулся:

UIScrollView: 0x7f95c9c7adf0; frame = (0 0; 320 568); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7f95c9c7f5f0>; layer = <CALayer: 0x7f95c9c79820>; contentOffset: {0, 0}; contentSize: {1840, 1752}> 
    | <UIImageView: 0x7f95c9c7ed40; frame = (317.5 561; 2.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x7f95c9c7ec20>> 
    | <UIImageView: 0x7f95c9c7d2f0; frame = (313 565.5; 7 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x7f95c9c7dda0>> 
    | <UIButton: 0x7f95c9d9f9c0; frame = (0 0; 320 568); opaque = NO; layer = <CALayer: 0x7f95c9d9e750>> 
    | | <UIButton: 0x7f95c9d9fea0; frame = (0 0; 200 64); opaque = NO; layer = <CALayer: 0x7f95c9d96540>> 
| | | <UIImageView: 0x7f95c9cc4590; frame = (0 0; 200 64); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7f95c9cc4690>> 

И:

(lldb) po [button recursiveDescription] 
<UIButton: 0x7f95cd24e1f0; frame = (0 0; 200 64); opaque = NO; tag = 0; layer = <CALayer: 0x7f95cd24e100>> 
    | <UIImageView: 0x7f95cd251b70; frame = (0 0; 200 64); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7f95cd251c70>> 

UPDATE 4: код, кажется, работает очень хорошо после того, как изменилось в целое: buttonHolderView = [[UIView Alloc] initWithFrame: CGRectMake (свиток. frame.origin.x, scroll.frame.origin.y, scroll.frame.size.width, scroll.frame.size.height)];

Спасибо за вашу помощь, особенно для DoertyDoerk, который показал мне что-то совершенно новое.

+0

Опция «User Interaction Enabled» отключена для прокрутки? Я пробовал ваш код, и это сработало. – gabbler

+3

Предложение 1: найдите любой элемент управления кнопкой с 'userInteractionEnabled', установленным в' NO'. –

+3

Предложение 2: в качестве теста удалите все распознаватели жестов. Они могут вмешиваться в события касания. –

ответ

2

Ваш код кнопки сам выглядит отлично. За исключением xPossition, yPossition бит компилируется красиво и вызывается buttonPressed:. Я бы заподозрил проблему с вашей иерархией просмотров, как уже было предложено в предыдущих комментариях. Я бы установил точку останова в конце вашего метода viewDidLoad. Затем на разрыве консоли введите следующую команду и проверьте, не наложена ли ваша кнопка.

po [[UIWindow keyWindow] recursiveDescription]

Вы можете скопировать & вставить результат в текстовый редактор для более легкого чтения.

Надеюсь, что это поможет! enter image description here

+0

Как написать эту команду в консоли? –

+0

Я добавил скриншот к моему более раннему ответу. Когда приложение попадает на точку останова, просто скопируйте и запустите команду, я указал вам в окно консоли в правом нижнем углу экрана Xcode, как показано выше, и нажмите return. Вы также можете попытаться сломать в конце '-viewDidAppear', если результаты не будут окончательными. – DoertyDoerk

+0

Когда я пишу команду, она возвращает nil в следующей строке, что она должна делать? –

1

Может попробовать это:

[buttonHolderView bringSubviewToFront:button]; 
+0

пробовал и не работает, но thx для предложения –

+0

Кажется почти как «Ты можешь меня видеть, но ты не можешь меня тронуть». Кнопка видна, но возможно, это в меньшем кадре. Пример: рамка с высотой 100 и кнопка с позицией 120 y, которую вы можете увидеть, но не нажмите ее. – weso

+0

yes that is wright –

Смежные вопросы