как добавить кнопки в контроллер страницы - PullRequest
0 голосов
/ 21 марта 2011

Интересно, как вы можете добавить кнопки (влево и вправо), чтобы изменить представления управления страницей. Я работаю над этим уроком [1]: http://www.edumobile.org/iphone/iphone-programming-tutorials/pagecontrol-example-in-iphone/. Как добавить 2 простые кнопки (левую и правую) для переворачивания страниц в дополнение к функции подкачки в этом примере кода?

Я начинающий программист, поэтому любой ответ очень важен! :)

спасибо!

Ответы [ 2 ]

1 голос
/ 21 марта 2011

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

UIButton *leftButton = [[UIButton alloc] init];
leftbutton.frame = leftButtonFrame;
[leftbutton setTitle:@"Left" forState:UIControlStateNormal];
[leftbutton addTarget:self action:@selector(leftbuttonClicked:) forControlEvents:UIControlEventTouchUpInside];
[yourView addSubview:leftbutton];


UIButton *rightButton = [[UIButton alloc] init];
rightButton.frame = rightButtonFrame;
[rightButton setTitle:@"Right" forState:UIControlStateNormal];
[rightButton addTarget:self action:@selector(rightButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[yourView addSubview:rightButton];

- (void)leftButtonclicked:(id)sender
{
//Code to turn page left
}

- (void)rightButtonclicked:(id)sender
{
//Code to turn page right
}
0 голосов
/ 20 ноября 2017

Я собираюсь ответить на это быстро, но вы должны быть в состоянии перевести.

Процесс состоит в том, чтобы найти представление PageControl, добавить две кнопки и при необходимости скрыть кнопки (т.е. на предыдущей странице нет предыдущей кнопки).

Я размещаю кнопки слева и справа от PageControl. Поведение по умолчанию состоит в том, что касание там делает страницу назад и страницу вперед. Таким образом, я установил кнопки в положение enable = false, чтобы касания выполняли это поведение по умолчанию.

Сначала нам понадобится enum, чтобы помочь найти кнопки. Используйте значения, которые не будут использоваться в других местах.

enum enumBtnTag: Int {
    case tagPrev = 9991
    case tagNext = 9992

}

var pageNbr = 0  //Needed to keep track of page being displayed

Теперь мы добавим наши кнопки в ViewDidLoad. Сначала я нахожу PageControl, затем ищу кнопки, чтобы не создавать дважды. (ViewDidload может вызываться несколько раз)

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    for view in self.view.subviews {
        if view is UIPageControl {
            let curr:UIPageControl = view as! UIPageControl
            curr.backgroundColor = UIColor.clear
            curr.currentPageIndicatorTintColor = UIColor.red   //Page Dot is red
            curr.pageIndicatorTintColor = UIColor.black   //Other dots are black

            let pcSz = view.frame
            let btnSz = CGSize(width: 35, height: 50)  //Use your button size


            if let _ = self.view.viewWithTag(enumBtnTag.tagNext.rawValue) as? UIButton {}
            else {   //Next Button not found
                let Nbtn = UIButton(frame: CGRect(x: pcSz.width - btnSz.width, y: -15, width: btnSz.width, height: btnSz.height))
                Nbtn.setTitle(">>", for: UIControlState.normal)
                Nbtn.backgroundColor = UIColor.clear
                Nbtn.setTitleColor(UIColor.brown, for: UIControlState.normal)
                Nbtn.titleLabel?.font = UIFont(name: enumFontNames.MarkerFelt_Wide.rawValue, size: 60.0)
                Nbtn.isEnabled = false  //Allows touch to fall through to PageControl
                Nbtn.tag = enumBtnTag.tagNext.rawValue

                view.addSubview(Nbtn)

            }


            if let _ = self.view.viewWithTag(enumBtnTag.tagPrev.rawValue) as? UIButton {}
            else {   //Prev Button not found
                let Pbtn = UIButton(frame: CGRect(x: 0, y: -15, width: btnSz.width, height: btnSz.height))
                Pbtn.setTitle("<<", for: UIControlState.normal)
                Pbtn.backgroundColor = UIColor.clear
                Pbtn.setTitleColor(UIColor.brown, for: UIControlState.normal)
                Pbtn.titleLabel?.font = UIFont(name: enumFontNames.MarkerFelt_Wide.rawValue, size: 60.0)
                Pbtn.isEnabled = false
                Pbtn.isHidden = true
                Pbtn.tag = enumBtnTag.tagPrev.rawValue

                view.addSubview(Pbtn)
            }
        }
    }

}

Затем я фиксирую страницу, которая будет отображаться. Страница может не отображаться (пользователь не перетянул достаточно далеко), но это будет обработано позже.

func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {

    if let identifier = pendingViewControllers[0].restorationIdentifier {
        if let index = pages.index(of: identifier) {
            pageNbr = index
        }
    }

}

Теперь мы модифицируем кнопки в didFinishAnimating;

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {

    if finished && completed {

        if let button = self.view.viewWithTag(enumBtnTag.tagPrev.rawValue) as? UIButton {
            if pageNbr > 0 {
                button.isHidden = false
            } else {
                button.isHidden = true
            }
        }


        if let button = self.view.viewWithTag(enumBtnTag.tagNext.rawValue) as? UIButton {
            if pageNbr < pages.count - 1 {
               button.isHidden = true
            } else {
               button.isHidden = false
            }
        }

    }

}

Бонус-код: я добавил функцию Сохранить на последней странице, где находится кнопка «Далее». Вам нужно установить, включена ли кнопка (чтобы она регистрировала касание) и установить цель (какую функцию вы хотите выполнить); мой "NextSegue". и, конечно, удалить цель, когда не на последней странице;

if pageNbr < pages.count - 1 {
    //Not on last page. Use next button
    button.setTitle(">>", for: UIControlState.normal)
    button.removeTarget(self, action:  #selector(nextSegue), for: UIControlEvents.touchUpInside)
    button.isEnabled = false
} else {
    //On last page. Use save button
    button.setTitle("S", for: UIControlState.normal)
    button.addTarget(self, action: #selector(nextSegue), for: UIControlEvents.touchUpInside)
    button.isEnabled = true
}

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...