2012-02-24 2 views
3

다음과 같이 프로그래밍 방식으로보기와 단추를 추가하고 싶습니다.프로그래밍 방식으로 단추로보기 추가

문제는 버튼이 클릭 할 때 반응하지 않는다는 것입니다. 강조 표시도없고 선택기를 호출하지도 않습니다.

이유는 녹음 (사운드 파일)에 대한 목록 행을 구현하려는 것입니다. 목록 행은 드릴 다운을 위해 선택 가능해야하며 재생 버튼이 있어야합니다. 그래서 RecordingView 하위 클래스 UIView 그 자체가 생성자의 타겟을 사용하여 버튼을 추가합니다. 아래 코드를 참조하십시오.

listrow

사람도 해결책이 될 수있는이 작업을 수행하는 더 나은 방법이 있다면. 직접보기 컨트롤러하는 .m 파일에서, 버튼을 클릭에 반응 않는

- (id)initWithFrame:(CGRect)frame withTarget:(id) target 
{ 
    self = [super initWithFrame:frame]; 

    UIButton *playButton = [[UIButton alloc] initWithFrame:CGRectMake(185, 5, 80, 40)]; 
    [playButton setTitle:@"Play" forState:UIControlStateNormal]; 
    [playButton setTitleColor:[UIColor darkTextColor]forState:UIControlStateNormal]; 
    // creating images here ... 
    [playButton setBackgroundImage:imGray forState: UIControlStateNormal]; 
    [playButton setBackgroundImage:imRed forState: UIControlStateHighlighted]; 
    [playButton setEnabled:YES]; 
    [playButton setUserInteractionEnabled:YES]; 
    [playButton addTarget: target 
        action: @selector(buttonClicked:) 
     forControlEvents: UIControlEventTouchDown]; 

    [self addSubview:playButton]; 

    return self; 
} 

I 버튼 같은 방법으로 추가

@implementation RecordingView

- (IBAction) myAction { 
    RecordingView *recordingView = [[RecordingView alloc] initWithFrame:CGRectMake(30, 400, 130, 50)withTarget:self]; 
    [recordingView setUserInteractionEnabled:YES]; 
    [[self view] addSubview:recordingView]; 
} 

@implementation MyViewController. 그래서 RecordingView에 대해 뭔가가 있습니다. 내가 여기서 다르게해야 할 일은 무엇입니까?

또한 터치 이벤트에 대상과 선택기를 제공하는 더 좋은 방법이 있습니까?

+0

실제 코드입니까? 두 개의 UIImage 변수 (imGrey 및 imRed)는 어디에 선언하거나 채 웁니까? 당신은 초기화 방법에있어, 그래서 그들은 ivars 수 없습니다? 귀하의 질문과 관련하여, 당신은 녹음 목록을 원한다 - 당신은 테이블보기 후에 있습니까? 녹화보기가 대신 표 셀 하위 클래스가 될 수 있습니까? – jrturton

+0

사실, 나는 이미지 생성을위한 코드를 생략했다. 이것은 실제 코드이지만 단순성을 위해 게시 할 때 물건을 삭제합니다. 나는 이것을 분명히 할 것이다. 예, 레코딩 뷰는 대신 테이블 셀일 수 있습니다. 나는 코드에서 iOS UI를 새로 만들었다. 이것은 나의 첫번째 것의 하나이다. 그래서 어떤 방향이라도 환영 받는다.:) – JOG

+0

@jrturton : 네, UITableViewDelegate에서이 코드를'- (UITableViewCell *) tableView : (UITableView *) tableView cellForRowAtIndexPath : (NSIndexPath *) indexPath' 메서드에서 사용할 계획입니다. ... 내가 일하게되면, 그럴거야. ^^ – JOG

답변

5

RecordingView에서 userInteractionEnabled ~ YES으로 설정하면됩니다.

다른 문제점

은 (130)의 프레임 폭을 갖는 RecordingView를 작성하지만 185 playButton의 X 축은 원점을 설정하고이 playButton는 수퍼의 경계 외부에서 전적으로 수단이다. clipsToBounds의 기본값은 NO이므로 버튼이 그려집니다. 그러나 터치 이벤트는 버튼에 도달하지 않습니다. 왜냐하면 시스템이 RecordingView을 쳤을 때 거부되기 때문입니다.

UIView Class ReferencehitTest:withEvent: 문서에서이다 : 수신기의 경계 외부에있는

포인트는 실제로 수신기의 파단 중 하나 내에있는 경우에도 안타로보고되지 않습니다. 현재보기의 clipsToBounds 속성이 NO으로 설정되고 영향을받는 하위보기가보기의 범위를 벗어나는 경우 발생할 수 있습니다.

당신은 RecordingView의 프레임이 넓은하게, 또는 그 슈퍼 뷰의 경계 내부로 playButton를 이동하거나해야합니다.

+0

아니, 작동하지 않았다. 질문 코드를 업데이트 중입니다. – JOG

+0

나는 내 대답을 수정했다. –

+0

너비가 너무 많아서 – JOG

관련 문제