2016-02-29 57 views
0

我對編程/編碼真的很陌生(即,直到本週末我從來沒有這樣做過),並且我陷入了困境。我一直在YouTube上搜索大量的教程和東西,我相信我做的一切正確,但是我的選擇器輪子顯示「?」而不是正確的值,除非其中一個「?」被選中時,正確的文本顯示在文本字段中。任何人都能發現我的錯誤嗎UIPickerView返回「?」在PickerWheel上,但在UITextField中返回正確的值XCode 7

我已經看過這個論壇加載,但再次,據我所知,我所做的一切都是正確的。

P.s.我不能在此刻嵌入照片,因爲我太新

TextField returning correct data

Corresponding data selected on PickerView displayed as a "?"

import UIKit 

class ProfileCreator: UIViewController, UIPickerViewDelegate, UITextFieldDelegate, UIPickerViewDataSource { 

// -------------------------------------------------------------------------------------- // 

// DOB Selector From Text Field Start 1 // 

@IBOutlet weak var DOBSelectorTextField: UITextField! 

func textFieldDidBeginEditing(textField: UITextField) { 
    let datepicker = UIDatePicker() 
    textField.inputView = datepicker 
    datepicker.datePickerMode = UIDatePickerMode.Date 
    datepicker.addTarget(self, action: "datepickerchanged:", forControlEvents: .ValueChanged) 
} 

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    textField.resignFirstResponder() 
    return true 
} 

func datepickerchanged(sender: UIDatePicker) { 
    let formatter = NSDateFormatter() 
    formatter.dateFormat = "dd MMMM yyyy" 
    DOBSelectorTextField.text = formatter.stringFromDate(sender.date) 

} 

// DOB Selector From Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Gender Selector From Text Field Start 1 // 

@IBOutlet weak var GenderSelectorTextField: UITextField! 
var GenderSelectorData = ["Male", "Female"] 
var GenderSelectorPicker = UIPickerView() 

// Gender Selector From Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Height Whole Number Text Field Start 1 // 

@IBOutlet weak var HeightWholeNumberTextField: UITextField! 

// Height Whole Number Text Field Start 1 // 

// -------------------------------------------------------------------------------------- // 

// Height Whole Number Unit Selector Text Field Start 1 // 

@IBOutlet weak var HeightWholeNumberUnitSelectorTextField: UITextField! 
var HeightWholeNumberUnitSelectorData = ["m", "ft"] 
var HeightWholeNumberUnitSelectorPicker = UIPickerView() 

// Height Whole Number Unit Selector Text Field Start 1 // 

// -------------------------------------------------------------------------------------- // 

// Height Decimal Number Text Field Start 1 // 

@IBOutlet weak var HeightDecimalTextField: UITextField! 

// Height Decimal Number Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Height Decimal Number Unit Selector Text Field Start 1 // 

@IBOutlet weak var HeightDecimalNumberUnitSelectorTextField: UITextField! 
var HeightDecimalNumberUnitSelectorData = ["cm", "inch"] 
var HeightDecimalNumberUnitSelectorPicker = UIPickerView() 

// Height Decimal Number Unit Selector Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Whole Number Text Field Start 1 // 

@IBOutlet weak var CurrentWeightWholeNumberTextField: UITextField! 

// Current Weight Whole Number Text Field Start 1 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Whole Number Unit Selector Text Field Start 1 // 

@IBOutlet weak var CurrentWeightWholeNumberUnitSelectorTextField: UITextField! 
var CurrentWeightWholeNumberUnitSelectorData = ["kg", "lb"] 
var CurrentWeightWholeNumberUnitSelectorPicker = UIPickerView() 

// Current Weight Whole Number Unit Selector Text Field Start 1 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Decimal Number Text Field Start 1 // 

@IBOutlet weak var CurrentWeightDecimalNumberTextField: UITextField! 

// Current Weight Decimal Number Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Decimal Number Unit Selector Text Field Start 1 // 

@IBOutlet weak var CurrentWeightDecimalNumberUnitSelectorTextField: UITextField! 
var CurrentWeightDecimalNumberUnitSelectorData = ["g", "oz"] 
var CurrentWeightDecimalNumberUnitSelectorPicker = UIPickerView() 

// Current Weight Decimal Number Unit Selector Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Close keyboard start // 

func closekeyboard() { 
    self.view.endEditing(true) 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    closekeyboard() 
} 

// Close keyboard end // 

// -------------------------------------------------------------------------------------- // 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

// -------------------------------------------------------------------------------------- // 

// DOB Selector From Text Field Start 2 // 

    DOBSelectorTextField.delegate = self 

// DOB Selector From Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Gender Selector From Text Field Start 2 // 

    GenderSelectorPicker.delegate = self 
    GenderSelectorPicker.dataSource = self 
    GenderSelectorTextField.inputView = GenderSelectorPicker 

// Gender Selector From Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Height Whole Number Unit Selector Text Field Start 2 // 

    HeightWholeNumberUnitSelectorPicker.delegate = self 
    HeightWholeNumberUnitSelectorPicker.dataSource = self 
    HeightWholeNumberUnitSelectorTextField.inputView = HeightWholeNumberUnitSelectorPicker 

// Height Whole Number Unit Selector Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Height Decimal Unit Selector Text Field Start 1 // 

    HeightDecimalNumberUnitSelectorPicker.delegate = self 
    HeightDecimalNumberUnitSelectorPicker.dataSource = self 
    HeightDecimalNumberUnitSelectorTextField.inputView = HeightDecimalNumberUnitSelectorPicker 

// Height Decimal Unit Selector Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Whole Number Unit Selector Text Field Start 2 // 

    CurrentWeightWholeNumberUnitSelectorPicker.delegate = self 
    CurrentWeightWholeNumberUnitSelectorPicker.dataSource = self 
    CurrentWeightWholeNumberUnitSelectorTextField.inputView = CurrentWeightWholeNumberUnitSelectorPicker 

// Current Weight Whole Number Unit Selector Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Decimal Unit Selector Text Field Start 1 // 

    CurrentWeightDecimalNumberUnitSelectorPicker.delegate = self 
    CurrentWeightDecimalNumberUnitSelectorPicker.dataSource = self 
    CurrentWeightDecimalNumberUnitSelectorTextField.inputView = CurrentWeightDecimalNumberUnitSelectorPicker 

// Current Weight Decimal Unit Selector Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// -------------------------------------------------------------------------------------- // 

// Selectors Start 1 // 

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
    return 1 

} 

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    if pickerView == GenderSelectorPicker { 
     return GenderSelectorData.count 

     } else if pickerView == HeightWholeNumberUnitSelectorPicker { 
      return HeightWholeNumberUnitSelectorData.count 

     } else if pickerView == HeightDecimalNumberUnitSelectorPicker { 
      return HeightDecimalNumberUnitSelectorData.count 

     } else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker { 
      return CurrentWeightWholeNumberUnitSelectorData.count 

     } else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker { 
      return CurrentWeightDecimalNumberUnitSelectorData.count 

     } 

    return 1 

} 

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent comonent: Int) { 
    if pickerView == GenderSelectorPicker { 
     GenderSelectorTextField.text = GenderSelectorData[row] 

     } else if pickerView == HeightWholeNumberUnitSelectorPicker { 
      HeightWholeNumberUnitSelectorTextField.text = HeightWholeNumberUnitSelectorData[row] 

     } else if pickerView == HeightDecimalNumberUnitSelectorPicker { 
      HeightDecimalNumberUnitSelectorTextField.text = HeightDecimalNumberUnitSelectorData[row] 

     } else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker { 
      CurrentWeightWholeNumberUnitSelectorTextField.text = CurrentWeightWholeNumberUnitSelectorData[row] 

     } else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker { 
      CurrentWeightDecimalNumberUnitSelectorTextField.text = CurrentWeightDecimalNumberUnitSelectorData[row] 

} 

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if pickerView == GenderSelectorPicker { 
     return GenderSelectorData[row] 

     } else if pickerView == HeightWholeNumberUnitSelectorPicker { 
      return HeightWholeNumberUnitSelectorData[row] 

     } else if pickerView == HeightDecimalNumberUnitSelectorPicker { 
      return HeightDecimalNumberUnitSelectorData[row] 

     } else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker { 
      return CurrentWeightWholeNumberUnitSelectorData[row] 

     } else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker { 
      return CurrentWeightDecimalNumberUnitSelectorData[row] 

     } 

      return "" 

    } 

} 

// Selectors End 1 

} 
+0

固定的格式,它是不可能的閱讀。 – RaffAl

+0

道歉,應該現在可讀 – snoopios

回答

0

在向我的一位朋友詢問有關問題後,他提出瞭解決我遇到的問題的解決方案。

TextField returning correct data

PickerView now returning correct data

附:我已經添加了更多的選擇器,所以與我第一次發佈原始問題時相比,代碼確實有一點額外的優勢。

我希望這可以幫助別人

import UIKit 

class ProfileCreator: UIViewController, UIPickerViewDelegate, UITextFieldDelegate, UIPickerViewDataSource { 

var output: Int = 0 
var output2: Int = 0 

// -------------------------------------------------------------------------------------- // 

// DOB Selector From Text Field Start 1 // 

@IBOutlet weak var DOBSelectorTextField: UITextField! 

func textFieldDidBeginEditing(textField: UITextField) { 
    let datepicker = UIDatePicker() 
    textField.inputView = datepicker 
    datepicker.datePickerMode = UIDatePickerMode.Date 
    datepicker.addTarget(self, action: "datepickerchanged:", forControlEvents: .ValueChanged) 
} 

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    textField.resignFirstResponder() 
    return true 
} 

func datepickerchanged(sender: UIDatePicker) { 
    let formatter = NSDateFormatter() 
    formatter.dateFormat = "dd MMMM yyyy" 
    DOBSelectorTextField.text = formatter.stringFromDate(sender.date) 

} 

// DOB Selector From Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Gender Selector From Text Field Start 1 // 

@IBOutlet weak var GenderSelectorTextField: UITextField! 
var GenderSelectorData = ["Male", "Female"] 
var GenderSelectorPicker = UIPickerView() 

// Gender Selector From Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Height Whole Number Text Field Start 1 // 

@IBOutlet weak var HeightWholeNumberTextField: UITextField! 

// Height Whole Number Text Field Start 1 // 

// -------------------------------------------------------------------------------------- // 

// Height Whole Number Unit Selector Text Field Start 1 // 

@IBOutlet weak var HeightWholeNumberUnitSelectorTextField: UITextField! 
var HeightWholeNumberUnitSelectorData = ["m", "ft"] 
var HeightWholeNumberUnitSelectorPicker = UIPickerView() 

// Height Whole Number Unit Selector Text Field Start 1 // 

// -------------------------------------------------------------------------------------- // 

// Height Decimal Number Text Field Start 1 // 

@IBOutlet weak var HeightDecimalTextField: UITextField! 

// Height Decimal Number Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Height Decimal Number Unit Selector Text Field Start 1 // 

@IBOutlet weak var HeightDecimalNumberUnitSelectorTextField: UITextField! 
var HeightDecimalNumberUnitSelectorData = ["cm", "inch"] 
var HeightDecimalNumberUnitSelectorPicker = UIPickerView() 

// Height Decimal Number Unit Selector Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Whole Number Text Field Start 1 // 

@IBOutlet weak var CurrentWeightWholeNumberTextField: UITextField! 

// Current Weight Whole Number Text Field Start 1 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Whole Number Unit Selector Text Field Start 1 // 

@IBOutlet weak var CurrentWeightWholeNumberUnitSelectorTextField: UITextField! 
var CurrentWeightWholeNumberUnitSelectorData = ["kg", "lb"] 
var CurrentWeightWholeNumberUnitSelectorPicker = UIPickerView() 

// Current Weight Whole Number Unit Selector Text Field Start 1 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Decimal Number Text Field Start 1 // 

@IBOutlet weak var CurrentWeightDecimalNumberTextField: UITextField! 

// Current Weight Decimal Number Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Decimal Number Unit Selector Text Field Start 1 // 

@IBOutlet weak var CurrentWeightDecimalNumberUnitSelectorTextField: UITextField! 
var CurrentWeightDecimalNumberUnitSelectorData = ["g", "oz"] 
var CurrentWeightDecimalNumberUnitSelectorPicker = UIPickerView() 

// Current Weight Decimal Number Unit Selector Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Current Fitness Goal Selector Text Field Start 1 // 

@IBOutlet weak var CurrentFitnessGoalSelectorTextField: UITextField! 
var CurrentFitnessGoalSelectorData = ["Lose Fat", "Gain Muscle", "Maintain Physique"] 
var CurrentFitnessGoalSelectorPicker = UIPickerView() 

// Current Fitness Goal Selector Text Field End 1 // 

// -------------------------------------------------------------------------------------- // 

// Weekly Activity Level Text Field Start 1 // 

@IBOutlet weak var WeeklyActivityLevelTextField: UITextField! 
var WeeklyActivityLevelTextFieldData = ["I am sedentary (little or no exercise)", "I am lightly active (light exercise/sports 1-3 days per week)", "I am moderately active (moderate exercise/sports 3-5 days per week)", "I am very active (hard exercise/sports 6-7 days a week)", "I am extra active (very hard exercise/sports & physical job or 2 x training"] 
var WeeklyActivityLevelSelectorPicker = UIPickerView() 

// Weekly Activity Level Text Field End 1 // 

// Close keyboard start // 

func closekeyboard() { 
    self.view.endEditing(true) 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    closekeyboard() 
} 

// Close keyboard end // 

// -------------------------------------------------------------------------------------- // 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

// -------------------------------------------------------------------------------------- // 

// DOB Selector From Text Field Start 2 // 

    DOBSelectorTextField.delegate = self 

// DOB Selector From Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Gender Selector From Text Field Start 2 // 

    GenderSelectorPicker.delegate = self 
    GenderSelectorPicker.dataSource = self 
    GenderSelectorTextField.inputView = GenderSelectorPicker 

// Gender Selector From Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Height Whole Number Unit Selector Text Field Start 2 // 

    HeightWholeNumberUnitSelectorPicker.delegate = self 
    HeightWholeNumberUnitSelectorPicker.dataSource = self 
    HeightWholeNumberUnitSelectorTextField.inputView = HeightWholeNumberUnitSelectorPicker 

// Height Whole Number Unit Selector Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Height Decimal Unit Selector Text Field Start 2 // 

    HeightDecimalNumberUnitSelectorPicker.delegate = self 
    HeightDecimalNumberUnitSelectorPicker.dataSource = self 
    HeightDecimalNumberUnitSelectorTextField.inputView = HeightDecimalNumberUnitSelectorPicker 

// Height Decimal Unit Selector Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Whole Number Unit Selector Text Field Start 2 // 

    CurrentWeightWholeNumberUnitSelectorPicker.delegate = self 
    CurrentWeightWholeNumberUnitSelectorPicker.dataSource = self 
    CurrentWeightWholeNumberUnitSelectorTextField.inputView = CurrentWeightWholeNumberUnitSelectorPicker 

// Current Weight Whole Number Unit Selector Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Current Weight Decimal Unit Selector Text Field Start 2 // 

    CurrentWeightDecimalNumberUnitSelectorPicker.delegate = self 
    CurrentWeightDecimalNumberUnitSelectorPicker.dataSource = self 
    CurrentWeightDecimalNumberUnitSelectorTextField.inputView = CurrentWeightDecimalNumberUnitSelectorPicker 

// Current Weight Decimal Unit Selector Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Current Fitness Goal Selector Text Field Start 2 // 

    CurrentFitnessGoalSelectorPicker.delegate = self 
    CurrentFitnessGoalSelectorPicker.dataSource = self 
    CurrentFitnessGoalSelectorTextField.inputView = CurrentFitnessGoalSelectorPicker 

// Current Fitness Goal Selector Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

// Weekly Activity Level Selector Text Field Start 2 // 

    WeeklyActivityLevelSelectorPicker.delegate = self 
    WeeklyActivityLevelSelectorPicker.dataSource = self 
    WeeklyActivityLevelTextField.inputView = WeeklyActivityLevelSelectorPicker 

// Weekly Activity Level Selector Text Field End 2 // 

// -------------------------------------------------------------------------------------- // 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

// -------------------------------------------------------------------------------------- // 

// Selectors Start 1 // 

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
    return 1 

} 

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    if pickerView == GenderSelectorPicker { 
     output = 1 
    } else if pickerView == HeightWholeNumberUnitSelectorPicker { 
     output = 2 
    } else if pickerView == HeightDecimalNumberUnitSelectorPicker { 
     output = 3 
    } else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker { 
     output = 4 
    } else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker { 
     output = 5 
    } else if pickerView == CurrentFitnessGoalSelectorPicker { output = 6 
    } else if pickerView == WeeklyActivityLevelSelectorPicker { 
     output = 7 
    } 

    switch output{ 
    case 1: 
     return GenderSelectorData.count 
    case 2: 
     return HeightWholeNumberUnitSelectorData.count 
    case 3: 
     return HeightDecimalNumberUnitSelectorData.count 
    case 4: 
     return CurrentWeightWholeNumberUnitSelectorData.count 
    case 5: 
     return CurrentWeightDecimalNumberUnitSelectorData.count 
    case 6: 
     return CurrentFitnessGoalSelectorData.count 
    case 7: 
     return WeeklyActivityLevelTextFieldData.count 
    default: 
     return 1 
    } 
} 

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if pickerView == GenderSelectorPicker { 
     output2 = 1 
    } else if pickerView == HeightWholeNumberUnitSelectorPicker { 
     output2 = 2 
    } else if pickerView == HeightDecimalNumberUnitSelectorPicker { 
     output2 = 3 
    } else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker { 
     output2 = 4 
    } else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker { 
     output2 = 5 
    } else if pickerView == CurrentFitnessGoalSelectorPicker { 
     output2 = 6 
    } else if pickerView == WeeklyActivityLevelSelectorPicker { 
     output2 = 7 
    } 

    switch output2{ 
    case 1: 
     return GenderSelectorData[row] 
    case 2: 
     return HeightWholeNumberUnitSelectorData[row] 
    case 3: 
     return HeightDecimalNumberUnitSelectorData[row] 
    case 4: 
     return CurrentWeightWholeNumberUnitSelectorData[row] 
    case 5: 
     return CurrentWeightDecimalNumberUnitSelectorData[row] 
    case 6: 
     return CurrentFitnessGoalSelectorData[row] 
    case 7: 
     return WeeklyActivityLevelTextFieldData[row] 
    default: 
     return "" 
    } 
} 


func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent comonent: Int) { 
    if pickerView == GenderSelectorPicker { 
     GenderSelectorTextField.text = GenderSelectorData[row] 
    } else if pickerView == HeightWholeNumberUnitSelectorPicker { 
     HeightWholeNumberUnitSelectorTextField.text = HeightWholeNumberUnitSelectorData[row] 
    } else if pickerView == HeightDecimalNumberUnitSelectorPicker { 
     HeightDecimalNumberUnitSelectorTextField.text = HeightDecimalNumberUnitSelectorData[row] 
    } else if pickerView == CurrentWeightWholeNumberUnitSelectorPicker { 
     CurrentWeightWholeNumberUnitSelectorTextField.text = CurrentWeightWholeNumberUnitSelectorData[row] 
    } else if pickerView == CurrentWeightDecimalNumberUnitSelectorPicker { 
     CurrentWeightDecimalNumberUnitSelectorTextField.text = CurrentWeightDecimalNumberUnitSelectorData[row] 
    } else if pickerView == CurrentFitnessGoalSelectorPicker { 
     CurrentFitnessGoalSelectorTextField.text = CurrentFitnessGoalSelectorData[row] 
    } else if pickerView == WeeklyActivityLevelSelectorPicker { 
     WeeklyActivityLevelTextField.text = WeeklyActivityLevelTextFieldData[row] 
    } 
} 
} 
0

您正在創建的,而不是使用IBOutlets幾個新UIPickerView s到連接您已有的選擇器視圖在您的視圖控制器中顯示的xib/storyboard中(因爲您不會將新創建的選擇器添加爲子視圖)。

請確保使用IBOutlets,並且已經在界面構建器中設置了委託/數據源。這應該有希望解決您的問題。

+0

感謝您的答覆。但我必須承認,我仍然有點困惑。由於我使用的是UITextFields,我不得不有效地告訴程序它們被用作UIPickerViews,因此var ......... = UIPickerView()?或者是因爲我有IBOutlets,我應該更改IBOutlet弱變量「我的UITextField」:UITextField!到IBOutlet弱var「我的UITextField」:UIPickerView! ?對我缺乏理解抱歉。 – snoopios

相關問題