2015-10-02 4 views
4

В настоящее время я делаю демонстрационное приложение iOS для практики в быстром режиме, и у меня возникла проблема. Я только что создал новую страницу, и на этой странице есть только одна кнопка. Я связал кнопку с функцией IBAction и показал правильное соединение.IBAction func правильно подключен, но не выполняет

Я бы показал вам снимок экрана, но у меня нет достаточной репутации (каждый другой вопрос, который у меня когда-либо был, я мог найти сообщение от кого-то другого).

Он даже показывает круг с заполненной точкой, и при нажатии на него отображается правильная кнопка. В инспекторе соединений он отображает при отправленных событиях соединение между «Touch Up Inside» и «UserPage btnProgressClick» (Userpage - это мой класс, который расширяет UIViewController и ссылается на этот пакетный контроллер просмотра, а btnProgressClick - это имя функции IBAction, которую я хочу бег).

Я нашел this post, и я попробовал чистую сборку, но это не сработало. Я также передвинул свою кнопку вокруг, и она правильно обновилась в симуляторе.

Код внутри btnProgressClick не выполняется. Я поставил точку останова в первой строке и не сломался.

Вот XML-код «Main.storyboard», который связывает кнопку с функцией.

<!--User Page--> 
    <scene sceneID="aNb-aX-hZF"> 
     <objects> 
      <viewController storyboardIdentifier="UserPage" id="w2h-zR-Kdu" customClass="UserPage" customModule="GenomeTrackerDemo" customModuleProvider="target" sceneMemberID="viewController"> 
       <layoutGuides> 
        <viewControllerLayoutGuide type="top" id="9dS-Hw-ZYg"/> 
        <viewControllerLayoutGuide type="bottom" id="7PS-pA-lFe"/> 
       </layoutGuides> 
       <view key="view" contentMode="scaleToFill" id="w6A-eT-aKv"> 
        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/> 
        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> 
        <subviews> 
         <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JGD-xx-tMQ"> 
          <rect key="frame" x="20" y="48" width="46" height="30"/> 
          <state key="normal" title="Button"/> 
          <connections> 
           <action selector="btnProgressClick:" destination="w2h-zR-Kdu" eventType="touchUpInside" id="F1N-QY-fhb"/> 
          </connections> 
         </button> 
        </subviews> 
        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 
       </view> 
      </viewController> 
      <placeholder placeholderIdentifier="IBFirstResponder" id="Fsq-L4-Are" userLabel="First Responder" sceneMemberID="firstResponder"/> 
     </objects> 
     <point key="canvasLocation" x="1043" y="426"/> 
    </scene> 

и вот UserPage Класс:

import Foundation 
import UIKit 

class UserPage: UIViewController { 

    var thisUser: User = User() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    @IBAction func btnProgressClick(sender: UIButton) { 

     let storyboard = UIStoryboard(name: "Main", bundle:nil) 

     let vc: progressPage = storyboard.instantiateViewControllerWithIdentifier("progressPage") as! progressPage 


     UIView.transitionFromView(self.view, toView: vc.view, duration: 0.8, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil) 
    } 

} 

Как я уже говорил, это мой первый вопрос, так что я открыт для обратной связи о том, как она была сформулирована и то, что информация, которую я дал.

Я хотел бы добавить некоторую информацию о том, как называется эта страница. Он вызывается после вызова Async веб-службе. После того как данные успешно вернули мне перейти на страницу с этой функцией:

func afterSuccessfulLogin(thisUser: User){ 

    dispatch_async(dispatch_get_main_queue()){ 
     let storyboard = UIStoryboard(name: "Main", bundle:nil) 

     let vc: UserPage = storyboard.instantiateViewControllerWithIdentifier("UserPage") as! UserPage 
     vc.thisUser = thisUser 


     UIView.setAnimationCurve(.EaseIn) 

     UIView.transitionFromView(self.view, toView: vc.view, duration: 1.2, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil) 
    } 
} 

не уверен, если это делает разницу, но я полагал, что я бы бросить это там.

Любая помощь по этому вопросу была бы очень полезной.

Спасибо!

+0

Как вы подтвердили, что функция не вызывается, попытались ли вы установить точку останова в этой функции, чтобы убедиться, что она не встречается? –

+0

Согласовано. Похоже, что розетка была сделана правильно, поэтому мне любопытно, называется ли какая-либо функция. – Russell

+0

Да, это именно то, что я сделал. Точка останова никогда не попадалась. Извините, я должен был положить это в сообщение. –

ответ

1

[удален перед ответом, из-за дополнительной информации, о котором идет речь]

IOS, содержит иерархию представления и иерархию зрения контроллера. Оба они должны быть последовательными. В коде, отправленном в вопросе, обрабатывается только иерархия представлений. Попробуйте следующие изменения:

  1. Вызов addChildViewController: на self до вызова transitionFromView:toView:duration:options:completion: прохождения vc.
  2. В блоке завершения для метода transitionFromView:toView:duration:options:completion: позвоните по номеру didMoveToParentViewController: по телефону vc, минуя self.

    let storyboard = UIStoryboard(name: "Main", bundle:nil) 
    
    let vc: UserPage = storyboard.instantiateViewControllerWithIdentifier("UserPage") as! UserPage 
    vc.thisUser = thisUser 
    
    
    UIView.setAnimationCurve(.EaseIn) 
    
    self.addChildViewController(vc) 
    UIView.transitionFromView(self.view, toView: vc.view, duration: 1.2, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: { (finished) -> Void in vc.didMoveToParentViewController(self) }) 
    

Это тоже немного странно называть transitionFromView:toView:duration:options:completion: и передавая self.view в качестве параметра fromView.Параметр fromView обычно удаляется и заменяется параметром toView, который оставит исходный контроллер представления в иерархии диспетчера представлений без фактического представления в иерархии представлений. Было бы разумно ввести вложенный UIView, который вы заменяете вместо self.view.

+0

Нет радости. Я нарушил связь. Целевое членство имело целевое приложение и проверено. UserPage автоматически заполнялся при вводе в поле Class. Я снова подключил кнопку с помощью ctrl-drag к функции и снова запустил ее. Все еще не выполняет эту функцию .... Это убивает меня. –

+0

Единственное, что я могу придумать, это то, что ваша кнопка отключена от взаимодействия пользователя или что она вырисовывается за пределами ее родительского представления, но родительский элемент не настроен на просмотр подзонов. :/Он заметно выделяется, когда вы касаетесь его? –

+0

Только что проверили инспектор атрибутов для кнопки и активировано User Interaction Enabled. и да, кнопка, видимо выделяющаяся, когда я нажимаю на нее. Слово «кнопка» мигает белым. –

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