1

基本的に、質問を追加するクイズアプリがあり、選択した後、別の画面に切り替えて正解の拡張バージョンを表示します。ボタンとラベルを追加しようとしましたが、これを行うと、ボタンとラベルがなくなった後、最終的に画面に「ゴースト」が表示されます。メソッド内から追加した各ボタンとラベルが新しい画面に表示されるように、すべてのサブビューを削除するにはどうすればよいですか?

class MyApplicationController < UIViewController

def loadView  
    self.view = UIImageView.alloc.init  
end

def viewDidLoad  
    super  
    view.userInteractionEnabled=true  
    @question_index=0  
    @answerChoices = []  
    @questionChoices=["What is best in life?",...]  
    makeQuestion  
end  

def makeQuestion 
    left =20  
    top=100  
    label = UILabel.new  
    label.text =@questionChoices[@question_index]  
    label.textAlignment = UITextAlignmentCenter  
    label.textColor = UIColor.redColor  
    label.frame = [[20,20], [view.frame.size.width-40, 40]]  
    label.lineBreakMode = UILineBreakModeWordWrap  
    label.numberOfLines = 0  
    label.sizeToFit  
    view.image = UIImage.imageNamed('background.jpg')  
    view.addSubview(label)  
    4.times do |i|  
        @button = UIButton.buttonWithType(UIButtonTypeRoundedRect)  
    @button.setTitle(@answerChoices[i][@question_index], forState:UIControlStateNormal)  
        @button.frame = [[left, top], [view.frame.size.width - left * 2, 40]]  
    @button.addTarget(self, action:'actionTapped:', forControlEvents:UIControlEventTouchUpInside)  
        @button.tag=i  
        top+=45  
        view.addSubview(@button)  
    end  
end

def makeAnswer  
    @button.removeFromSuperview
    @button.removeFromSuperview
    @button.removeFromSuperview
    @button.removeFromSuperview
    view.image = UIImage.imageNamed('back.jpg')
    label = UILabel.new
    label.text =@rightArray[@question_index]
    label.textAlignment = UITextAlignmentCenter
    label.textColor = UIColor.blackColor
    label.frame = [[20,20], [view.frame.size.width-40, 40]]  
    label.lineBreakMode = UILineBreakModeWordWrap  
    label.numberOfLines = 0  
    label.sizeToFit  
    view.addSubview(label)  


    @button = UIButton.buttonWithType(UIButtonTypeRoundedRect)  
    @button.setTitle("More questions", forState:UIControlStateNormal)  
    @button.tag=1  
    @button.addTarget(self, action:'makeQuestion', forControlEvents:UIControlEventTouchUpInside)     
    @button.frame = [[20, 100], [view.frame.size.width - 20 * 2, 40]]  
    view.addSubview(@button)  
end 

end
4

1 に答える 1

3

ボタンの配列が必要です。4.timesループでは、インスタンス変数を@button4 回上書きしています。代わりに、@button をボタンの配列にして、各インデックスに異なるボタンを割り当てます。

変数がmyViewあり、そのサブビューをすべて削除したい場合、これでうまくいくと思います:

myView.subviews.each {|sv| sv.removeFromSuperview}
于 2012-09-22T17:55:56.187 に答える