我在Storyboard中有3个View Controller。他们被命名为" Letters"," Numbers"和" Other"。
我想要的是一个根据最后使用的类别而变化的变量。
Ex:用户转到 class App extends React.Component {
constructor() {
super();
this.state = {
lightboxIsOpen: true,
currentImage: 0,
}
this.closeLightbox = this.closeLightbox.bind(this);
this.gotoNext = this.gotoNext.bind(this);
this.gotoPrevious = this.gotoPrevious.bind(this);
this.gotoImage = this.gotoImage.bind(this);
this.handleClickImage = this.handleClickImage.bind(this);
this.openLightbox = this.openLightbox.bind(this);
}
openLightbox (index, event) {
event.preventDefault();
this.setState({
currentImage: index,
lightboxIsOpen: true,
});
}
gotoPrevious() {
this.setState({
currentImage: this.state.currentImage - 1,
});
}
gotoNext() {
this.setState({
currentImage: this.state.currentImage + 1,
});
}
gotoImage (index) {
this.setState({
currentImage: index,
})
}
handleClickImage () {
if (this.state.currentImage === this.props.images.length - 1) return;
this.gotoNext();
}
closeLightbox() {
this.setState({
currentImage: 0,
lightboxIsOpen: false,
});
}
renderGallery () {
const { images } = this.props;
if (!images) return;
const gallery = images.filter(i => i.useForDemo).map((obj, i) => {
return (
<a
href={obj.src}
className={css(classes.thumbnail, classes[obj.orientation])}
key={i}
onClick={(e) => this.openLightbox(i, e)}
>
<img src={obj.thumbnail} className={css(classes.source)} />
</a>
);
});
return (
<div className={css(classes.gallery)}>
{gallery}
</div>
);
}
render() {
return (
<div className="section">
{this.props.heading && <h2>{this.props.heading}</h2>}
{this.props.subheading && <p>{this.props.subheading}</p>}
{this.renderGallery()}
<Lightbox
currentImage={this.state.currentImage}
images={[{ src: 'https://docs.google.com/uc?id=0B0huBtqYaof7N250S3JicmxxNmM' }]}
isOpen={this.state.lightboxIsOpen}
onClickImage={this.handleClickImage}
onClickPrev={this.gotoPrevious}
onClickNext={this.gotoNext}
onClose={this.closeLightbox}
onClickThumbnail={this.gotoImage}
showThumbnails={this.props.showThumbnails}
theme={this.props.theme}
/>
</div>
)
}
}
ReactDOM.render(
<App/>,document.getElementById("contents")
)
视图控制器(Letters
),然后转到var categories = "Letters"
视图控制器,并能够使用&#34;类别&#34 ;变量(仍为Other
)。用户转到"Letters"
视图控制器(Numbers
),然后转到var categories = "Numbers"
视图控制器,并且能够使用Other
变量(现在为{{1} }})。
我不确定我的问题和示例是否足够明确,如果他们不能随意提问,我会尝试进一步解释。
非常感谢任何帮助。
提前致谢。
答案 0 :(得分:1)
有很多方法可以做到这一点,但关键的概念是你不改变其他类中的变量,你改变类的实例(对象)中的东西。
我将尽力保持这一点。
所以,你可以创建一个具有App State种类的类
<img src="{{obj.image.url}}" />.
然后,在代码中的任何位置,您都可以
public class AppState {
public var category: String? = nil
public static let shared = AppState()
}
或
AppState.shared.category = "Letters"
执行此操作不是最佳方式,但它会起作用并且很简单。为了更进一步,您可以了解依赖注入。使用它,不会有全局共享实例,而是将相应的AppState对象传递给需要它的对象。
答案 1 :(得分:0)
执行此操作的最佳方法是在每个视图控制器上创建一个名为categories
的变量,并在呈现下一个视图控制器之前为其指定值。
示例:强>
信件视图控制器
var categories = [String]()
func goToNextViewController()
{
let numbersVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "numbersVC")
numbersVC.categories = self.categories
self.presentViewController(numbersVC, animated: true, completion: nil)
}
数字视图控制器
var categories = [String]()