2012-06-25 141 views
2

正在嘗試根據方向更改更改按鈕幀,但按鈕操作未檢測到幀是否更改。更改按鈕幀時按鈕操作不起作用

addButtonsOnScrollView」 梅索德從 「viewWillAppear」 方法

叫這裏是我的代碼

//scaleFactor = 320 if portrait orientation scaleFactor= 480 if landscape orientation 

- (void) addButtonsOnScrollView 
{ 
    containerViewForButtons = [[UIView alloc]initWithFrame:CGRectMake(scaleFactor-100, 22, 100, 37)]; 
     addButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [addButton addTarget:self action:@selector(addFriend:)forControlEvents:UIControlEventTouchDown]; 
    [addButton setBackgroundImage:[UIImage imageNamed:@"add_btn.png"] forState:UIControlStateNormal]; 
    addButton.frame = CGRectMake(0, 0, 37, 37); 
    [containerViewForButtons addSubview:addButton]; 
    [self.view addSubview:containerViewForButtons]; 
} 

- (void) addFriend:(UIButton *) button { 
    NSLog("Button clicked...."); 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
// Return YES for supported orientations 
    if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) { 

     [self layoutLandscapeView]; 
     } 
     else if (interfaceOrientation == UIInterfaceOrientationPortrait) { 

     [self layoutPortraitView]; 
     } 
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 
} 
- (void) layoutLandscapeView { 

    containerViewForButtons.frame = CGRectMake(380, 22, 100, 37); 

} 
- (void) layoutPortraitView { 

    containerViewForButtons.frame = CGRectMake(220, 22, 100, 37); 
} 

回答

2

您是否將按鈕添加到滾動視圖中(從方法名稱看起來像它)?旋轉時,滾動視圖的內容大小很可能不會更新。這就是按鈕無法檢測到觸摸的原因。

+0

感謝它爲我工作...非常感謝。 –

1

最初創建UIButtonTypeRoundRect而不是UIButtonTypeCustom。以便您可以看到Button的可見性。檢查按鈕可見且可觸摸。

另一件事可能是更改UIControlEventTouchDownUIControlEventToucUpInSide這將幫助我猜。

+0

我申請通過您建議的修改,但它沒有工作的me.Button是可見的,但不是動心了。 –

+0

你確定你可以觸摸你的按鈕嗎?代碼沒問題。沒有任何其他原因不應該引發事件。唯一的問題是你需要檢查按鈕是否可觸摸。檢查滾動視圖交互和按鈕交互屬性。 –

+0

按鈕不可觸摸。我設置按鈕屬性userInteractionEnabled = YES&enabled = YES,但不起作用 –

1

嘗試設置containerViewForButtons.clipsToBounds = YES;只是爲了檢查按鈕是否仍然在視圖框架中並且沒有被切斷。如果clipsToBounds設置爲NO,您仍然會看到該按鈕,但它不會攔截任何觸摸,因爲它不在containerViewForButtons範圍內

1

試試這個......

- (void) layoutLandscapeView 
{ 

    [containerViewForButtons removeFromSuperview]; 
    containerViewForButtons.frame = CGRectMake(380, 22, 100, 37); 
    [self.view addSubview:containerViewForButtons]; 
} 
- (void) layoutPortraitView 
{ 

    [containerViewForButtons removeFromSuperview]; 
    containerViewForButtons.frame = CGRectMake(220, 22, 100, 37); 
    [self.view addSubview:containerViewForButtons]; 
} 
+0

刪除和添加旋轉視圖可能會導致「wait_fences」警告並延遲旋轉。 –